From e558be2b89cc2358c74ee9b20d54bb18677e3db2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 25 Jun 2018 14:53:33 +0800 Subject: [PATCH] Disable clipboard check if the top scene is solid --- .../com/hippo/ehviewer/ui/MainActivity.java | 39 ++++++++++++++----- .../java/com/hippo/scene/StageActivity.java | 8 ++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index d1505471b..a63f9e4c5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -85,6 +85,7 @@ import com.hippo.util.PermissionRequester; import com.hippo.widget.LoadImageView; import com.hippo.yorozuya.IOUtils; import com.hippo.yorozuya.ResourcesUtils; +import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.ViewUtils; import java.io.File; import java.io.FileOutputStream; @@ -408,18 +409,38 @@ public final class MainActivity extends StageActivity checkClipboardUrl(); } - private String getTextFromClipboard() { - ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - if (clipboard != null) { - ClipData clip = clipboard.getPrimaryClip(); - if (clip != null && clip.getItemCount() > 0) { - return clip.getItemAt(0).getText().toString(); - } - } - return null; + @Override + protected void onTransactScene() { + super.onTransactScene(); + + checkClipboardUrl(); } private void checkClipboardUrl() { + SimpleHandler.getInstance().postDelayed(() -> { + if (!isSolid()) { + checkClipboardUrlInternal(); + } + }, 300); + } + + private boolean isSolid() { + Class topClass = getTopSceneClass(); + return topClass == null || SolidScene.class.isAssignableFrom(topClass); + } + + private String getTextFromClipboard() { + ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboard != null) { + ClipData clip = clipboard.getPrimaryClip(); + if (clip != null && clip.getItemCount() > 0) { + return clip.getItemAt(0).getText().toString(); + } + } + return null; + } + + private void checkClipboardUrlInternal() { String text = getTextFromClipboard(); int hashCode = text != null ? text.hashCode() : 0; diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index ff4f6b889..d673b6989 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -231,6 +231,9 @@ public abstract class StageActivity extends EhActivity { protected void onUnregister() { } + protected void onTransactScene() { + } + public int getStageId() { return mStageId; } @@ -311,6 +314,7 @@ public abstract class StageActivity extends EhActivity { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); // New arguments if (args != null && fragment instanceof SceneFragment) { @@ -384,6 +388,7 @@ public abstract class StageActivity extends EhActivity { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); // Check request if (announcer.requestFrom != null) { @@ -460,6 +465,7 @@ public abstract class StageActivity extends EhActivity { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); if (!createNewScene && args != null) { // TODO Call onNewArguments when view created ? @@ -538,6 +544,7 @@ public abstract class StageActivity extends EhActivity { } transaction.remove(scene); transaction.commitAllowingStateLoss(); + onTransactScene(); // Remove tag mSceneTagList.remove(index); @@ -562,6 +569,7 @@ public abstract class StageActivity extends EhActivity { transaction.detach(fragment); transaction.attach(fragment); transaction.commitAllowingStateLoss(); + onTransactScene(); } @Override