diff --git a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java index 436644b46..db431eb5f 100644 --- a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java +++ b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java @@ -93,7 +93,7 @@ public abstract class HippyEngine { } params.check(); LogUtils.enableDebugLog(params.enableLog); - ContextHolder.setContext(params.context); + ContextHolder.initAppContext(params.context); HippyEngine hippyEngine; if (params.groupId == -1) { diff --git a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineHost.java b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineHost.java index 6d0f7602a..2e2c0daaa 100644 --- a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineHost.java +++ b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineHost.java @@ -33,7 +33,7 @@ public abstract class HippyEngineHost { public HippyEngineHost(Application application) { mApplication = application; - ContextHolder.setContext(mApplication); + ContextHolder.initAppContext(mApplication); } public HippyEngineManager createDebugHippyEngineManager(String debugJs) { diff --git a/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/clipboard/ClipboardModule.java b/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/clipboard/ClipboardModule.java index 27ec7ef20..5529aca6c 100644 --- a/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/clipboard/ClipboardModule.java +++ b/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/clipboard/ClipboardModule.java @@ -9,45 +9,56 @@ import com.tencent.mtt.hippy.annotation.HippyNativeModule; import com.tencent.mtt.hippy.modules.Promise; import com.tencent.mtt.hippy.modules.nativemodules.HippyNativeModuleBase; import android.content.ClipboardManager; +import com.tencent.mtt.hippy.utils.ContextHolder; @HippyNativeModule(name = "ClipboardModule") public class ClipboardModule extends HippyNativeModuleBase { - private final ClipboardManager mClipboardManager; + private final ClipboardManager mClipboardManager; - public ClipboardModule(HippyEngineContext context) { - super(context); - mClipboardManager = (ClipboardManager) (mContext.getGlobalConfigs()).getContext() - .getSystemService(Context.CLIPBOARD_SERVICE); - } - - - private ClipboardManager getClipboardService() { - return mClipboardManager; - } - - @SuppressWarnings("unused") - @HippyMethod(name = "getString") - public void getString(Promise promise) { - try { - ClipboardManager clipboard = getClipboardService(); - ClipData clipData = clipboard.getPrimaryClip(); - if (clipData != null && clipData.getItemCount() >= 1) { - ClipData.Item firstItem = clipboard.getPrimaryClip().getItemAt(0); - promise.resolve("" + firstItem.getText()); - } else { - promise.resolve(""); - } - } catch (Exception e) { - promise.reject(e); + public ClipboardModule(HippyEngineContext context) { + super(context); + mClipboardManager = (ClipboardManager) (mContext.getGlobalConfigs()).getContext() + .getSystemService(Context.CLIPBOARD_SERVICE); } - } - @SuppressWarnings("unused") - @HippyMethod(name = "setString") - public void setString(String text) { - ClipData clipdata = ClipData.newPlainText(null, text); - ClipboardManager clipboard = getClipboardService(); - clipboard.setPrimaryClip(clipdata); - } + private ClipboardManager getClipboardService() { + return mClipboardManager; + } + + @SuppressWarnings("unused") + @HippyMethod(name = "getString") + public void getString(Promise promise) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) { + if (ContextHolder.isAppOnBackground()) { + promise.resolve(""); + return; + } + } + try { + ClipboardManager clipboard = getClipboardService(); + ClipData clipData = clipboard.getPrimaryClip(); + if (clipData != null && clipData.getItemCount() >= 1) { + ClipData.Item firstItem = clipboard.getPrimaryClip().getItemAt(0); + promise.resolve("" + firstItem.getText()); + } else { + promise.resolve(""); + } + } catch (Exception e) { + promise.reject(e); + } + } + + @SuppressWarnings("unused") + @HippyMethod(name = "setString") + public void setString(String text) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) { + if (ContextHolder.isAppOnBackground()) { + return; + } + } + ClipData clipdata = ClipData.newPlainText(null, text); + ClipboardManager clipboard = getClipboardService(); + clipboard.setPrimaryClip(clipdata); + } } diff --git a/modules/hippy_support/src/main/java/com/tencent/mtt/hippy/utils/ContextHolder.java b/modules/hippy_support/src/main/java/com/tencent/mtt/hippy/utils/ContextHolder.java index 97f7bc35e..f871e6e1a 100644 --- a/modules/hippy_support/src/main/java/com/tencent/mtt/hippy/utils/ContextHolder.java +++ b/modules/hippy_support/src/main/java/com/tencent/mtt/hippy/utils/ContextHolder.java @@ -15,19 +15,44 @@ */ package com.tencent.mtt.hippy.utils; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; +import java.util.List; public class ContextHolder { - private static Context applicationContext = null; + private static Context sAppContext; - public static void setContext(Context context) { - if (context != null && applicationContext == null) { - applicationContext = context.getApplicationContext(); + public static void initAppContext(Context context) { + if (context != null && sAppContext == null) { + sAppContext = context.getApplicationContext(); + } } - } - public static Context getAppContext() { - return applicationContext; - } + public static Context getAppContext() { + return sAppContext; + } + + public static boolean isAppOnBackground() { + if (sAppContext == null) { + return true; + } + ActivityManager activityManager = (ActivityManager) sAppContext + .getSystemService(Context.ACTIVITY_SERVICE); + List appProcesses = activityManager.getRunningAppProcesses(); + if (appProcesses == null) { + return true; + } + int myPid = android.os.Process.myPid(); + for (RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.pid == myPid) { + if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + return false; + } + return true; + } + } + return true; + } }