From 291488c60c72d9da2018d6f4cae99576c8ccedcd Mon Sep 17 00:00:00 2001 From: shifujun Date: Thu, 16 Apr 2020 14:17:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4Fragment=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code_generator/ActivityCodeGenerator.kt | 5 +- .../core/runtime/ContainerDialogFragment.java | 609 ------------------ .../core/runtime/ContainerFragment.java | 583 ----------------- .../runtime/IContainerDialogFragment.java | 29 - .../core/runtime/IContainerFragment.java | 83 --- .../core/runtime/PluginFragmentManager.java | 75 --- .../runtime/PluginFragmentTransaction.java | 190 ------ .../shadow/core/runtime/ShadowActivity.java | 15 - .../core/runtime/ShadowDialogFragment.java | 80 --- .../shadow/core/runtime/ShadowFragment.java | 609 ------------------ .../shadow/core/transform/TransformManager.kt | 1 - .../transform/specific/FragmentTransform.kt | 181 ------ 12 files changed, 1 insertion(+), 2459 deletions(-) delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerDialogFragment.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerFragment.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerDialogFragment.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerFragment.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentManager.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentTransaction.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowDialogFragment.java delete mode 100644 projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowFragment.java delete mode 100644 projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/specific/FragmentTransform.kt diff --git a/projects/sdk/coding/code-generator/src/main/kotlin/com/tencent/shadow/coding/code_generator/ActivityCodeGenerator.kt b/projects/sdk/coding/code-generator/src/main/kotlin/com/tencent/shadow/coding/code_generator/ActivityCodeGenerator.kt index 09928b374..8de9d9da4 100644 --- a/projects/sdk/coding/code-generator/src/main/kotlin/com/tencent/shadow/coding/code_generator/ActivityCodeGenerator.kt +++ b/projects/sdk/coding/code-generator/src/main/kotlin/com/tencent/shadow/coding/code_generator/ActivityCodeGenerator.kt @@ -5,7 +5,6 @@ package com.tencent.shadow.coding.code_generator import android.annotation.SuppressLint import android.app.Activity import android.app.Application -import android.app.FragmentManager import android.view.ContextThemeWrapper import android.view.KeyEvent import android.view.Window @@ -74,7 +73,6 @@ class ActivityCodeGenerator { init { classPool.makeClass("$RUNTIME_PACKAGE.ShadowApplication").toClass() - classPool.makeClass("$RUNTIME_PACKAGE.PluginFragmentManager").toClass() } val activityCallbackMethods = getActivityCallbackMethods(ActivityClass) @@ -94,8 +92,7 @@ class ActivityCodeGenerator { mapOf( Activity::class to "ShadowActivity", - Application::class to "ShadowApplication", - FragmentManager::class to "PluginFragmentManager" + Application::class to "ShadowApplication" ).forEach { val newClassName = "$RUNTIME_PACKAGE.${it.value}" renameMap[Descriptor.toJvmName(it.key.java.name)] = diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerDialogFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerDialogFragment.java deleted file mode 100644 index 465476950..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerDialogFragment.java +++ /dev/null @@ -1,609 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.animation.Animator; -import android.app.Activity; -import android.app.Dialog; -import android.app.DialogFragment; -import android.app.Fragment; -import android.app.LoaderManager; -import android.app.SharedElementCallback; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentSender; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.transition.Transition; -import android.util.AttributeSet; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import com.tencent.shadow.core.runtime.container.PluginContainerActivity; - -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.lang.reflect.Constructor; -import java.util.HashMap; -import java.util.Map; - -public class ContainerDialogFragment extends DialogFragment implements IContainerDialogFragment { - - private static Map> constructorMap = new HashMap<>(); - - private boolean init = false; - - private OnInflateParams mOnInflateParams; - private boolean mDestroyed; - - @Override - public Fragment asFragment() { - return this; - } - - private static class OnInflateParams { - final AttributeSet attrs; - final Bundle savedInstanceState; - - private OnInflateParams(AttributeSet attrs, Bundle savedInstanceState) { - this.attrs = attrs; - this.savedInstanceState = savedInstanceState; - } - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - return mPluginFragment.onCreateDialog(savedInstanceState); - } - - private static ShadowDialogFragment instantiatePluginFragment(ContainerDialogFragment containerFragment, Context context) { - String pluginFragmentClassName = containerFragment.getClass().getName() + "_"; - Constructor constructor = constructorMap.get(pluginFragmentClassName); - if (constructor == null) { - PluginContainerActivity containerActivity = (PluginContainerActivity) context; - PluginActivity pluginActivity = PluginActivity.get(containerActivity); - ClassLoader pluginClassLoader = pluginActivity.getClassLoader(); - try { - Class aClass = pluginClassLoader.loadClass(pluginFragmentClassName); - constructor = aClass.getConstructor(); - constructorMap.put(pluginFragmentClassName, constructor); - } catch (Exception e) { - throw new InstantiationException("无法构造" + pluginFragmentClassName, e); - } - } - try { - return ShadowDialogFragment.class.cast(constructor.newInstance()); - } catch (Exception e) { - throw new InstantiationException("无法构造" + pluginFragmentClassName, e); - } - } - - private ShadowDialogFragment mPluginFragment; - - /** - * 标志当前Fragment是否由app自己的代码创建的 - */ - private boolean mIsAppCreateFragment = false; - - public ShadowFragment getPluginFragment() { - return mPluginFragment; - } - - @Override - public void bindPluginFragment(ShadowFragment pluginFragment) { - init = true; - mIsAppCreateFragment = true; - mPluginFragment = (ShadowDialogFragment) pluginFragment; - } - - @Override - public void unbindPluginFragment() { - init = false; - mPluginFragment = null; - } - - private void initPluginFragment(Context context) { - if (init) { - return; - } - init = true; - - onBindPluginFragment(context); - - if (mOnInflateParams != null) { - mPluginFragment.onInflate(mOnInflateParams.attrs, mOnInflateParams.savedInstanceState); - mOnInflateParams = null; - } - } - - private void onBindPluginFragment(Context context) { - mPluginFragment = instantiatePluginFragment(this, context); - mPluginFragment.setContainerFragment(this); - } - - private void onUnbindPluginFragment() { - mPluginFragment.setContainerFragment(null); - mPluginFragment = null; - } - - @Override - public void onAttach(Context context) { - initPluginFragment(context); - super.onAttach(context); - - if (context instanceof PluginContainerActivity) { - Context pluginActivity = PluginActivity.get((PluginContainerActivity) context); - mPluginFragment.onAttach(pluginActivity); - } - } - - @Override - @Deprecated - public void onAttach(Activity activity) { - initPluginFragment(activity); - super.onAttach(activity); - if (activity instanceof PluginContainerActivity) { - Context pluginActivity = PluginActivity.get((PluginContainerActivity) activity); - mPluginFragment.onAttach((ShadowActivity)pluginActivity); - } - } - - @Override - public String toString() { - return mPluginFragment.toString(); - } - - @Override - public void setArguments(Bundle args) { - if (!mIsAppCreateFragment) { - mPluginFragment.setArguments(args); - } else { - super.setArguments(args); - } - } - - @Override - public void setInitialSavedState(SavedState state) { - mPluginFragment.setInitialSavedState(state); - } - - @Override - public Context getContext() { - return mPluginFragment.getContext(); - } - - @Override - public void onHiddenChanged(boolean hidden) { - mPluginFragment.onHiddenChanged(hidden); - } - - @Override - public void setRetainInstance(boolean retain) { - mPluginFragment.setRetainInstance(retain); - } - - @Override - public void setHasOptionsMenu(boolean hasMenu) { - mPluginFragment.setHasOptionsMenu(hasMenu); - } - - @Override - public void setMenuVisibility(boolean menuVisible) { - mPluginFragment.setMenuVisibility(menuVisible); - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - mPluginFragment.setUserVisibleHint(isVisibleToUser); - } - - @Override - public LoaderManager getLoaderManager() { - return mPluginFragment.getLoaderManager(); - } - - @Override - public void startActivity(Intent intent) { - mPluginFragment.startActivity(intent); - } - - @Override - public void startActivity(Intent intent, Bundle options) { - mPluginFragment.startActivity(intent, options); - } - - @Override - public void startActivityForResult(Intent intent, int requestCode) { - mPluginFragment.startActivityForResult(intent, requestCode); - } - - @Override - public void startActivityForResult(Intent intent, int requestCode, Bundle options) { - mPluginFragment.startActivityForResult(intent, requestCode, options); - } - - @Override - public void startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException { - mPluginFragment.startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask, flagsValues, extraFlags, options); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - mPluginFragment.onActivityResult(requestCode, resultCode, data); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - mPluginFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - - @Override - public boolean shouldShowRequestPermissionRationale(String permission) { - return mPluginFragment.shouldShowRequestPermissionRationale(permission); - } - - @Override - @Deprecated - public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { - super.onInflate(attrs, savedInstanceState); - mOnInflateParams = new OnInflateParams(attrs, savedInstanceState); - if (mPluginFragment != null) { - mPluginFragment.onInflate(attrs, savedInstanceState); - } - } - - @Override - public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) { - initPluginFragment(context); - super.onInflate(context, attrs, savedInstanceState); - mPluginFragment.onInflate(context, attrs, savedInstanceState); - } - - @Override - @Deprecated - public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { - super.onInflate(activity, attrs, savedInstanceState); - mPluginFragment.onInflate(activity, attrs, savedInstanceState); - } - - @Override - public void onAttachFragment(Fragment childFragment) { - mPluginFragment.onAttachFragment(childFragment); - } - - @Override - public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { - return mPluginFragment.onCreateAnimator(transit, enter, nextAnim); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mPluginFragment.onCreate(savedInstanceState); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return mPluginFragment.onCreateView(inflater, container, savedInstanceState); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - mPluginFragment.onViewCreated(view, savedInstanceState); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mPluginFragment.onActivityCreated(savedInstanceState); - } - - @Override - public void onViewStateRestored(Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - mPluginFragment.onViewStateRestored(savedInstanceState); - } - - @Override - public void onStart() { - super.onStart(); - mPluginFragment.onStart(); - } - - @Override - public void onResume() { - super.onResume(); - mPluginFragment.onResume(); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - mPluginFragment.onSaveInstanceState(outState); - } - - @Override - public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) { - mPluginFragment.onMultiWindowModeChanged(isInMultiWindowMode, newConfig); - } - - @Override - @Deprecated - public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { - mPluginFragment.onMultiWindowModeChanged(isInMultiWindowMode); - } - - @Override - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { - mPluginFragment.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); - } - - @Override - @Deprecated - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { - mPluginFragment.onPictureInPictureModeChanged(isInPictureInPictureMode); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - mPluginFragment.onConfigurationChanged(newConfig); - } - - @Override - public void onPause() { - super.onPause(); - mPluginFragment.onPause(); - } - - @Override - public void onStop() { - super.onStop(); - mPluginFragment.onStop(); - } - - @Override - public void onLowMemory() { - super.onLowMemory(); - mPluginFragment.onLowMemory(); - } - - @Override - public void onTrimMemory(int level) { - super.onTrimMemory(level); - mPluginFragment.onTrimMemory(level); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mPluginFragment.onDestroyView(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mPluginFragment.onDestroy(); - mDestroyed = true; - } - - @Override - public void onDetach() { - super.onDetach(); - mPluginFragment.onDetach(); - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - mPluginFragment.onCreateOptionsMenu(menu, inflater); - } - - @Override - public void onPrepareOptionsMenu(Menu menu) { - mPluginFragment.onPrepareOptionsMenu(menu); - } - - @Override - public void onDestroyOptionsMenu() { - mPluginFragment.onDestroyOptionsMenu(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - return mPluginFragment.onOptionsItemSelected(item); - } - - @Override - public void onOptionsMenuClosed(Menu menu) { - mPluginFragment.onOptionsMenuClosed(menu); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - mPluginFragment.onCreateContextMenu(menu, v, menuInfo); - } - - @Override - public void registerForContextMenu(View view) { - mPluginFragment.registerForContextMenu(view); - } - - @Override - public void unregisterForContextMenu(View view) { - mPluginFragment.unregisterForContextMenu(view); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - return mPluginFragment.onContextItemSelected(item); - } - - @Override - public void setEnterSharedElementCallback(SharedElementCallback callback) { - mPluginFragment.setEnterSharedElementCallback(callback); - } - - @Override - public void setExitSharedElementCallback(SharedElementCallback callback) { - mPluginFragment.setExitSharedElementCallback(callback); - } - - @Override - public void setEnterTransition(Transition transition) { - mPluginFragment.setEnterTransition(transition); - } - - @Override - public Transition getEnterTransition() { - return mPluginFragment.getEnterTransition(); - } - - @Override - public void setReturnTransition(Transition transition) { - mPluginFragment.setReturnTransition(transition); - } - - @Override - public Transition getReturnTransition() { - return mPluginFragment.getReturnTransition(); - } - - @Override - public void setExitTransition(Transition transition) { - mPluginFragment.setExitTransition(transition); - } - - @Override - public Transition getExitTransition() { - return mPluginFragment.getExitTransition(); - } - - @Override - public void setReenterTransition(Transition transition) { - mPluginFragment.setReenterTransition(transition); - } - - @Override - public Transition getReenterTransition() { - return mPluginFragment.getReenterTransition(); - } - - @Override - public void setSharedElementEnterTransition(Transition transition) { - mPluginFragment.setSharedElementEnterTransition(transition); - } - - @Override - public Transition getSharedElementEnterTransition() { - return mPluginFragment.getSharedElementEnterTransition(); - } - - @Override - public void setSharedElementReturnTransition(Transition transition) { - mPluginFragment.setSharedElementReturnTransition(transition); - } - - @Override - public Transition getSharedElementReturnTransition() { - return mPluginFragment.getSharedElementReturnTransition(); - } - - @Override - public void setAllowEnterTransitionOverlap(boolean allow) { - mPluginFragment.setAllowEnterTransitionOverlap(allow); - } - - @Override - public boolean getAllowEnterTransitionOverlap() { - return mPluginFragment.getAllowEnterTransitionOverlap(); - } - - @Override - public void setAllowReturnTransitionOverlap(boolean allow) { - mPluginFragment.setAllowReturnTransitionOverlap(allow); - } - - @Override - public boolean getAllowReturnTransitionOverlap() { - return mPluginFragment.getAllowReturnTransitionOverlap(); - } - - @Override - public void postponeEnterTransition() { - mPluginFragment.postponeEnterTransition(); - } - - @Override - public void startPostponedEnterTransition() { - mPluginFragment.startPostponedEnterTransition(); - } - - @Override - public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { - mPluginFragment.dump(prefix, fd, writer, args); - } - - @Override - public void onDismiss(DialogInterface dialog) { - mPluginFragment.onDismiss(dialog); - } - - @Override - public void onCancel(DialogInterface dialog) { - mPluginFragment.onCancel(dialog); - } - - @Override - public void superSetUserVisibleHint(boolean isVisibleToUser) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { - super.setUserVisibleHint(isVisibleToUser); - } - } - - @Override - public void superSetRetainInstance(boolean retain) { - super.setRetainInstance(retain); - } - - @Override - public void superSetHasOptionsMenu(boolean hasMenu) { - super.setHasOptionsMenu(hasMenu); - } - - @Override - public void superSetMenuVisibility(boolean menuVisible) { - super.setMenuVisibility(menuVisible); - } - - @Override - public void superOnHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - } - - @Override - public void superOnDismiss(DialogInterface dialog) { - super.onDismiss(dialog); - } -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerFragment.java deleted file mode 100644 index d2a0b5122..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ContainerFragment.java +++ /dev/null @@ -1,583 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.animation.Animator; -import android.app.Activity; -import android.app.Fragment; -import android.app.LoaderManager; -import android.app.SharedElementCallback; -import android.content.Context; -import android.content.Intent; -import android.content.IntentSender; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.transition.Transition; -import android.util.AttributeSet; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import com.tencent.shadow.core.runtime.container.PluginContainerActivity; - -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.lang.reflect.Constructor; -import java.util.HashMap; -import java.util.Map; - -@SuppressWarnings("NullableProblems") -public class ContainerFragment extends Fragment implements IContainerFragment { - private static Map> constructorMap = new HashMap<>(); - - private boolean init = false; - - private OnInflateParams mOnInflateParams; - private boolean mDestroyed; - - @Override - public Fragment asFragment() { - return this; - } - - private static class OnInflateParams { - final AttributeSet attrs; - final Bundle savedInstanceState; - - private OnInflateParams(AttributeSet attrs, Bundle savedInstanceState) { - this.attrs = attrs; - this.savedInstanceState = savedInstanceState; - } - } - - private static ShadowFragment instantiatePluginFragment(ContainerFragment containerFragment, Context context) { - String pluginFragmentClassName = containerFragment.getClass().getName() + "_"; - Constructor constructor = constructorMap.get(pluginFragmentClassName); - if (constructor == null) { - PluginContainerActivity containerActivity = (PluginContainerActivity) context; - PluginActivity pluginActivity = PluginActivity.get(containerActivity); - ClassLoader pluginClassLoader = pluginActivity.getClassLoader(); - try { - Class aClass = pluginClassLoader.loadClass(pluginFragmentClassName); - constructor = aClass.getConstructor(); - constructorMap.put(pluginFragmentClassName, constructor); - } catch (Exception e) { - throw new InstantiationException("无法构造" + pluginFragmentClassName, e); - } - } - try { - return ShadowFragment.class.cast(constructor.newInstance()); - } catch (Exception e) { - throw new InstantiationException("无法构造" + pluginFragmentClassName, e); - } - } - - private ShadowFragment mPluginFragment; - - /** - * 标志当前Fragment是否由app自己的代码创建的 - */ - private boolean mIsAppCreateFragment = false; - - @Override - public ShadowFragment getPluginFragment() { - return mPluginFragment; - } - - @Override - public void bindPluginFragment(ShadowFragment pluginFragment) { - init = true; - mIsAppCreateFragment = true; - mPluginFragment = pluginFragment; - } - - @Override - public void unbindPluginFragment() { - init = false; - mPluginFragment = null; - } - - private void initPluginFragment(Context context) { - if (init) { - return; - } - init = true; - - onBindPluginFragment(context); - - if (mOnInflateParams != null) { - mPluginFragment.onInflate(mOnInflateParams.attrs, mOnInflateParams.savedInstanceState); - mOnInflateParams = null; - } - } - - private void onBindPluginFragment(Context context) { - mPluginFragment = instantiatePluginFragment(this, context); - mPluginFragment.setContainerFragment(this); - } - - private void onUnbindPluginFragment() { - mPluginFragment.setContainerFragment(null); - mPluginFragment = null; - } - - @Override - public void onAttach(Context context) { - initPluginFragment(context); - super.onAttach(context); - - if (context instanceof PluginContainerActivity) { - Context pluginActivity = PluginActivity.get((PluginContainerActivity) context); - mPluginFragment.onAttach(pluginActivity); - } - } - - @Override - @Deprecated - public void onAttach(Activity activity) { - initPluginFragment(activity); - super.onAttach(activity); - if (activity instanceof PluginContainerActivity) { - ShadowActivity pluginActivity = (ShadowActivity) (PluginActivity.get((PluginContainerActivity) activity)); - mPluginFragment.onAttach(pluginActivity); - } - } - - @Override - public String toString() { - return mPluginFragment.toString(); - } - - - @Override - public void setInitialSavedState(SavedState state) { - mPluginFragment.setInitialSavedState(state); - } - - @Override - public Context getContext() { - return mPluginFragment.getContext(); - } - - @Override - public void onHiddenChanged(boolean hidden) { - mPluginFragment.onHiddenChanged(hidden); - } - - @Override - public void setRetainInstance(boolean retain) { - mPluginFragment.setRetainInstance(retain); - } - - @Override - public void setHasOptionsMenu(boolean hasMenu) { - mPluginFragment.setHasOptionsMenu(hasMenu); - } - - @Override - public void setMenuVisibility(boolean menuVisible) { - mPluginFragment.setMenuVisibility(menuVisible); - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - mPluginFragment.setUserVisibleHint(isVisibleToUser); - } - - @Override - public LoaderManager getLoaderManager() { - return mPluginFragment.getLoaderManager(); - } - - @Override - public void startActivity(Intent intent) { - mPluginFragment.startActivity(intent); - } - - @Override - public void startActivity(Intent intent, Bundle options) { - mPluginFragment.startActivity(intent, options); - } - - @Override - public void startActivityForResult(Intent intent, int requestCode) { - mPluginFragment.startActivityForResult(intent, requestCode); - } - - @Override - public void startActivityForResult(Intent intent, int requestCode, Bundle options) { - mPluginFragment.startActivityForResult(intent, requestCode, options); - } - - @Override - public void startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException { - mPluginFragment.startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask, flagsValues, extraFlags, options); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - mPluginFragment.onActivityResult(requestCode, resultCode, data); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - mPluginFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - - @Override - public boolean shouldShowRequestPermissionRationale(String permission) { - return mPluginFragment.shouldShowRequestPermissionRationale(permission); - } - - @Override - @Deprecated - public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { - super.onInflate(attrs, savedInstanceState); - mOnInflateParams = new OnInflateParams(attrs, savedInstanceState); - if (mPluginFragment != null) { - mPluginFragment.onInflate(attrs, savedInstanceState); - } - } - - @Override - public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) { - initPluginFragment(context); - super.onInflate(context, attrs, savedInstanceState); - mPluginFragment.onInflate(context, attrs, savedInstanceState); - } - - @Override - @Deprecated - public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { - initPluginFragment(activity); - super.onInflate(activity, attrs, savedInstanceState); - mPluginFragment.onInflate(activity, attrs, savedInstanceState); - } - - @Override - public void onAttachFragment(Fragment childFragment) { - mPluginFragment.onAttachFragment(childFragment); - } - - @Override - public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { - return mPluginFragment.onCreateAnimator(transit, enter, nextAnim); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mPluginFragment.onCreate(savedInstanceState); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return mPluginFragment.onCreateView(inflater, container, savedInstanceState); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - mPluginFragment.onViewCreated(view, savedInstanceState); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mPluginFragment.onActivityCreated(savedInstanceState); - } - - @Override - public void onViewStateRestored(Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - mPluginFragment.onViewStateRestored(savedInstanceState); - } - - @Override - public void onStart() { - super.onStart(); - mPluginFragment.onStart(); - } - - @Override - public void onResume() { - super.onResume(); - mPluginFragment.onResume(); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - mPluginFragment.onSaveInstanceState(outState); - } - - @Override - public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) { - mPluginFragment.onMultiWindowModeChanged(isInMultiWindowMode, newConfig); - } - - @Override - @Deprecated - public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { - mPluginFragment.onMultiWindowModeChanged(isInMultiWindowMode); - } - - @Override - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { - mPluginFragment.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); - } - - @Override - @Deprecated - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { - mPluginFragment.onPictureInPictureModeChanged(isInPictureInPictureMode); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - mPluginFragment.onConfigurationChanged(newConfig); - } - - @Override - public void onPause() { - super.onPause(); - mPluginFragment.onPause(); - } - - @Override - public void onStop() { - super.onStop(); - mPluginFragment.onStop(); - } - - @Override - public void onLowMemory() { - super.onLowMemory(); - mPluginFragment.onLowMemory(); - } - - @Override - public void onTrimMemory(int level) { - super.onTrimMemory(level); - mPluginFragment.onTrimMemory(level); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mPluginFragment.onDestroyView(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mPluginFragment.onDestroy(); - mDestroyed = true; - } - - @Override - public void onDetach() { - super.onDetach(); - mPluginFragment.onDetach(); - if (mDestroyed) { - onUnbindPluginFragment(); - } - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - mPluginFragment.onCreateOptionsMenu(menu, inflater); - } - - @Override - public void onPrepareOptionsMenu(Menu menu) { - mPluginFragment.onPrepareOptionsMenu(menu); - } - - @Override - public void onDestroyOptionsMenu() { - mPluginFragment.onDestroyOptionsMenu(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - return mPluginFragment.onOptionsItemSelected(item); - } - - @Override - public void onOptionsMenuClosed(Menu menu) { - mPluginFragment.onOptionsMenuClosed(menu); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - mPluginFragment.onCreateContextMenu(menu, v, menuInfo); - } - - @Override - public void registerForContextMenu(View view) { - mPluginFragment.registerForContextMenu(view); - } - - @Override - public void unregisterForContextMenu(View view) { - mPluginFragment.unregisterForContextMenu(view); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - return mPluginFragment.onContextItemSelected(item); - } - - @Override - public void setEnterSharedElementCallback(SharedElementCallback callback) { - mPluginFragment.setEnterSharedElementCallback(callback); - } - - @Override - public void setExitSharedElementCallback(SharedElementCallback callback) { - mPluginFragment.setExitSharedElementCallback(callback); - } - - @Override - public void setEnterTransition(Transition transition) { - mPluginFragment.setEnterTransition(transition); - } - - @Override - public Transition getEnterTransition() { - return mPluginFragment.getEnterTransition(); - } - - @Override - public void setReturnTransition(Transition transition) { - mPluginFragment.setReturnTransition(transition); - } - - @Override - public Transition getReturnTransition() { - return mPluginFragment.getReturnTransition(); - } - - @Override - public void setExitTransition(Transition transition) { - mPluginFragment.setExitTransition(transition); - } - - @Override - public Transition getExitTransition() { - return mPluginFragment.getExitTransition(); - } - - @Override - public void setReenterTransition(Transition transition) { - mPluginFragment.setReenterTransition(transition); - } - - @Override - public Transition getReenterTransition() { - return mPluginFragment.getReenterTransition(); - } - - @Override - public void setSharedElementEnterTransition(Transition transition) { - mPluginFragment.setSharedElementEnterTransition(transition); - } - - @Override - public Transition getSharedElementEnterTransition() { - return mPluginFragment.getSharedElementEnterTransition(); - } - - @Override - public void setSharedElementReturnTransition(Transition transition) { - mPluginFragment.setSharedElementReturnTransition(transition); - } - - @Override - public Transition getSharedElementReturnTransition() { - return mPluginFragment.getSharedElementReturnTransition(); - } - - @Override - public void setAllowEnterTransitionOverlap(boolean allow) { - mPluginFragment.setAllowEnterTransitionOverlap(allow); - } - - @Override - public boolean getAllowEnterTransitionOverlap() { - return mPluginFragment.getAllowEnterTransitionOverlap(); - } - - @Override - public void setAllowReturnTransitionOverlap(boolean allow) { - mPluginFragment.setAllowReturnTransitionOverlap(allow); - } - - @Override - public boolean getAllowReturnTransitionOverlap() { - return mPluginFragment.getAllowReturnTransitionOverlap(); - } - - @Override - public void postponeEnterTransition() { - mPluginFragment.postponeEnterTransition(); - } - - @Override - public void startPostponedEnterTransition() { - mPluginFragment.startPostponedEnterTransition(); - } - - @Override - public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { - mPluginFragment.dump(prefix, fd, writer, args); - } - - @Override - public void superSetUserVisibleHint(boolean isVisibleToUser) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { - super.setUserVisibleHint(isVisibleToUser); - } - } - - @Override - public void superSetRetainInstance(boolean retain) { - super.setRetainInstance(retain); - } - - @Override - public void superSetHasOptionsMenu(boolean hasMenu) { - super.setHasOptionsMenu(hasMenu); - } - - @Override - public void superSetMenuVisibility(boolean menuVisible) { - super.setMenuVisibility(menuVisible); - } - - @Override - public void superOnHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - } -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerDialogFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerDialogFragment.java deleted file mode 100644 index 1936eb2b6..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerDialogFragment.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.content.DialogInterface; - -public interface IContainerDialogFragment extends IContainerFragment { - - void onDismiss(DialogInterface dialog); - - void superOnDismiss(DialogInterface dialog); - -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerFragment.java deleted file mode 100644 index 0327b30b0..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/IContainerFragment.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; -import android.content.Context; -import android.os.Bundle; -import android.view.View; - -public interface IContainerFragment { - Fragment asFragment(); - - ShadowFragment getPluginFragment(); - - void bindPluginFragment(ShadowFragment pluginFragment); - - void unbindPluginFragment(); - - Activity getActivity(); - - void setArguments(Bundle args); - - Bundle getArguments(); - - boolean isAdded(); - - boolean isDetached(); - - boolean isRemoving(); - - boolean isInLayout(); - - boolean isResumed(); - - boolean isVisible(); - - boolean isHidden(); - - int getId(); - - String getTag(); - - View getView(); - - void requestPermissions(String[] permissions, int requestCode); - - Context getContext(); - - FragmentManager getChildFragmentManager(); - - boolean getUserVisibleHint(); - - void superSetUserVisibleHint(boolean isVisibleToUser); - - void superOnHiddenChanged(boolean hidden); - - void superSetRetainInstance(boolean retain); - - void superSetHasOptionsMenu(boolean hasMenu); - - void superSetMenuVisibility(boolean menuVisible) ; - - - -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentManager.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentManager.java deleted file mode 100644 index 8a61adbdc..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentManager.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.Fragment; -import android.app.FragmentManager; -import android.os.Build; -import android.os.Bundle; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class PluginFragmentManager { - FragmentManager mBase; - - PluginFragmentManager(FragmentManager mBase) { - this.mBase = mBase; - } - - @SuppressLint("CommitTransaction") - public PluginFragmentTransaction beginTransaction() { - return new PluginFragmentTransaction(this, mBase.beginTransaction()); - } - - public ShadowFragment findFragmentByTag(String tag) { - Fragment fragmentByTag = mBase.findFragmentByTag(tag); - if (fragmentByTag instanceof IContainerFragment) { - return ((IContainerFragment) fragmentByTag).getPluginFragment(); - } else { - return null; - } - } - - public boolean executePendingTransactions() { - return mBase.executePendingTransactions(); - } - - @TargetApi(Build.VERSION_CODES.O) - public List getFragments() { - List containerFragments = mBase.getFragments(); - List pluginFragments = new ArrayList<>(); - if (containerFragments != null && containerFragments.size() > 0) { - for (Fragment containerFragment : containerFragments) { - if (containerFragment instanceof IContainerFragment) { - pluginFragments.add(((IContainerFragment) containerFragment).getPluginFragment()); - } - } - } - return pluginFragments.size() > 0 ? pluginFragments : Collections.EMPTY_LIST; - } - - public ShadowFragment getFragment(Bundle bundle, String key) { - Fragment fragment = mBase.getFragment(bundle, key); - return ((IContainerFragment) fragment).getPluginFragment(); - } -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentTransaction.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentTransaction.java deleted file mode 100644 index 2a484145c..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginFragmentTransaction.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.annotation.TargetApi; -import android.app.Fragment; -import android.app.FragmentTransaction; -import android.os.Build; -import android.view.View; - -public class PluginFragmentTransaction { - final FragmentTransaction mBase; - final PluginFragmentManager mPluginFragmentManager; - - PluginFragmentTransaction(PluginFragmentManager pluginFragmentManager, FragmentTransaction mBase) { - this.mPluginFragmentManager = pluginFragmentManager; - this.mBase = mBase; - } - - private Fragment getContainerFragment(ShadowFragment shadowFragment) { - return shadowFragment.getContainerFragment().asFragment(); - } - - public PluginFragmentTransaction add(ShadowFragment fragment, String tag) { - mBase.add(getContainerFragment(fragment), tag); - return this; - } - - public PluginFragmentTransaction add(int containerViewId, ShadowFragment fragment) { - mBase.add(containerViewId, getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction add(int containerViewId, ShadowFragment fragment, String tag) { - mBase.add(containerViewId, getContainerFragment(fragment), tag); - return this; - } - - public PluginFragmentTransaction replace(int containerViewId, ShadowFragment fragment) { - mBase.replace(containerViewId, getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction replace(int containerViewId, ShadowFragment fragment, String tag) { - mBase.replace(containerViewId, getContainerFragment(fragment), tag); - return this; - } - - public PluginFragmentTransaction remove(ShadowFragment fragment) { - mBase.remove(getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction hide(ShadowFragment fragment) { - mBase.hide(getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction show(ShadowFragment fragment) { - mBase.show(getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction detach(ShadowFragment fragment) { - mBase.detach(getContainerFragment(fragment)); - return this; - } - - public PluginFragmentTransaction attach(ShadowFragment fragment) { - mBase.attach(getContainerFragment(fragment)); - return this; - } - - @TargetApi(Build.VERSION_CODES.O) - public PluginFragmentTransaction setPrimaryNavigationFragment(ShadowFragment fragment) { - mBase.setPrimaryNavigationFragment(getContainerFragment(fragment)); - return this; - } - - public boolean isEmpty() { - return mBase.isEmpty(); - } - - public PluginFragmentTransaction setCustomAnimations(int enter, int exit) { - mBase.setCustomAnimations(enter, exit); - return this; - } - - public PluginFragmentTransaction setCustomAnimations(int enter, int exit, int popEnter, int popExit) { - mBase.setCustomAnimations(enter, exit, popEnter, popExit); - return this; - } - - public PluginFragmentTransaction setTransition(int transit) { - mBase.setTransition(transit); - return this; - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public PluginFragmentTransaction addSharedElement(View sharedElement, String name) { - mBase.addSharedElement(sharedElement, name); - return this; - } - - public PluginFragmentTransaction setTransitionStyle(int styleRes) { - mBase.setTransitionStyle(styleRes); - return this; - } - - public PluginFragmentTransaction addToBackStack(String name) { - mBase.addToBackStack(name); - return this; - } - - public boolean isAddToBackStackAllowed() { - return mBase.isAddToBackStackAllowed(); - - } - - public PluginFragmentTransaction disallowAddToBackStack() { - mBase.disallowAddToBackStack(); - return this; - } - - public PluginFragmentTransaction setBreadCrumbTitle(int res) { - mBase.setBreadCrumbTitle(res); - return this; - } - - public PluginFragmentTransaction setBreadCrumbTitle(CharSequence text) { - mBase.setBreadCrumbTitle(text); - return this; - } - - public PluginFragmentTransaction setBreadCrumbShortTitle(int res) { - mBase.setBreadCrumbShortTitle(res); - return this; - } - - public PluginFragmentTransaction setBreadCrumbShortTitle(CharSequence text) { - mBase.setBreadCrumbShortTitle(text); - return this; - } - - @TargetApi(Build.VERSION_CODES.O) - public PluginFragmentTransaction setReorderingAllowed(boolean reorderingAllowed) { - mBase.setReorderingAllowed(reorderingAllowed); - return this; - } - - @TargetApi(Build.VERSION_CODES.O) - public PluginFragmentTransaction runOnCommit(Runnable runnable) { - mBase.runOnCommit(runnable); - return this; - } - - public int commit() { - return mBase.commit(); - } - - public int commitAllowingStateLoss() { - return mBase.commitAllowingStateLoss(); - } - - @TargetApi(Build.VERSION_CODES.N) - public void commitNow() { - mBase.commitNow(); - } - - @TargetApi(Build.VERSION_CODES.N) - public void commitNowAllowingStateLoss() { - mBase.commitNowAllowingStateLoss(); - } -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivity.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivity.java index 5fd1cc837..5079b593b 100644 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivity.java +++ b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivity.java @@ -19,7 +19,6 @@ package com.tencent.shadow.core.runtime; import android.app.Application; -import android.app.FragmentManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentSender; @@ -34,10 +33,6 @@ public abstract class ShadowActivity extends PluginActivity { - private int mFragmentManagerHash; - - private PluginFragmentManager mPluginFragmentManager; - public void setContentView(int layoutResID) { if ("merge".equals(XmlPullParserUtil.getLayoutStartTagName(getResources(), layoutResID))) { //如果传进来的xml文件的根tag是merge时,需要特殊处理 @@ -54,16 +49,6 @@ public final ShadowApplication getApplication() { return mPluginApplication; } - public PluginFragmentManager getFragmentManager() { - FragmentManager fragmentManager = hostActivityDelegator.getFragmentManager(); - int hash = System.identityHashCode(fragmentManager); - if (hash != mFragmentManagerHash) { - mFragmentManagerHash = hash; - mPluginFragmentManager = new PluginFragmentManager(fragmentManager); - } - return mPluginFragmentManager; - } - public final ShadowActivity getParent() { return null; } diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowDialogFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowDialogFragment.java deleted file mode 100644 index 90141413c..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowDialogFragment.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.content.DialogInterface; -import android.os.Bundle; - -public class ShadowDialogFragment extends ShadowFragment { - - private ContainerDialogFragment getContainerDialogFragment() { - return (ContainerDialogFragment) mContainerFragment; - } - - public void setStyle(int style, int theme) { - if (mIsAppCreateFragment) { - getContainerDialogFragment().setStyle(style, theme); - } - } - - public void setCancelable(boolean cancelable) { - if (mIsAppCreateFragment) { - getContainerDialogFragment().setCancelable(cancelable); - } - } - - public ShadowDialog getDialog() { - return (ShadowDialog) getContainerDialogFragment().getDialog(); - } - - public int getTheme() { - return getContainerDialogFragment().getTheme(); - } - - public boolean getShowsDialog() { - return getContainerDialogFragment().getShowsDialog(); - } - - public void setShowsDialog(boolean showsDialog) { - getContainerDialogFragment().setShowsDialog(showsDialog); - } - - public void dismiss() { - getContainerDialogFragment().dismiss(); - } - - public void dismissAllowingStateLoss() { - getContainerDialogFragment().dismissAllowingStateLoss(); - } - - public void show(PluginFragmentManager manager, String tag) { - getContainerDialogFragment().show(manager.mBase, tag); - } - - public ShadowDialog onCreateDialog(Bundle savedInstanceState) { - return new ShadowDialog(getActivity(), getTheme()); - } - - public void onDismiss(DialogInterface dialog) { - getContainerDialogFragment().superOnDismiss(dialog); - } - - public void onCancel(DialogInterface dialog) { - } -} diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowFragment.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowFragment.java deleted file mode 100644 index 7fc815d43..000000000 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowFragment.java +++ /dev/null @@ -1,609 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.runtime; - -import android.animation.Animator; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.LoaderManager; -import android.app.SharedElementCallback; -import android.content.Context; -import android.content.Intent; -import android.content.IntentSender; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Bundle; -import android.transition.Transition; -import android.util.AttributeSet; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import com.tencent.shadow.core.runtime.container.PluginContainerActivity; - -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.lang.reflect.Constructor; -import java.util.HashMap; -import java.util.Map; - -@SuppressWarnings("unused") -public class ShadowFragment { - private static Map> constructorMap = new HashMap<>(); - - private static IContainerFragment instantiateContainerFragment(ShadowFragment shadowFragment) { - String shadowFragmentClassname = shadowFragment.getClass().getName(); - String containerFragmentClassName = shadowFragmentClassname.substring(0, shadowFragmentClassname.length() - 1); - Constructor constructor = constructorMap.get(containerFragmentClassName); - if (constructor == null) { - ClassLoader pluginClassLoader = shadowFragment.getClass().getClassLoader(); - try { - Class aClass = pluginClassLoader.loadClass(containerFragmentClassName); - constructor = aClass.getConstructor(); - constructorMap.put(containerFragmentClassName, constructor); - } catch (Exception e) { - throw new Fragment.InstantiationException("无法构造" + containerFragmentClassName, e); - } - } - try { - return IContainerFragment.class.cast(constructor.newInstance()); - } catch (Exception e) { - throw new Fragment.InstantiationException("无法构造" + containerFragmentClassName, e); - } - } - - /** - * 标志当前Fragment是否由app自己的代码创建的 - */ - protected boolean mIsAppCreateFragment; - - PluginFragmentManager mPluginFragmentManager; - - public ShadowFragment() { - mContainerFragment = instantiateContainerFragment(this); - mContainerFragment.bindPluginFragment(this); - mIsAppCreateFragment = true; - } - - private Context mAttachedContext; - - protected IContainerFragment mContainerFragment; - - private int mChildPluginFragmentManagerHash; - - private PluginFragmentManager mChildPluginFragmentManager; - - public void setContainerFragment(IContainerFragment containerFragment) { - mIsAppCreateFragment = false; - mContainerFragment.unbindPluginFragment(); - mContainerFragment = containerFragment; - } - - public IContainerFragment getContainerFragment() { - if (mContainerFragment == null) { - throw new NullPointerException(this.getClass().getName() + " mContainerFragment == null"); - } - return mContainerFragment; - } - - final public ShadowActivity getActivity() { - if (mAttachedContext == null) { - return null; - } else if (mAttachedContext instanceof ShadowActivity) { - return (ShadowActivity) mAttachedContext; - } else { - final PluginContainerActivity activity = (PluginContainerActivity) mContainerFragment.getActivity(); - return (ShadowActivity) PluginActivity.get(activity); - } - } - - public void setArguments(Bundle args) { - if (mIsAppCreateFragment) { - mContainerFragment.setArguments(args); - } - } - - final public Bundle getArguments() { - return mContainerFragment.getArguments(); - } - - public PluginFragmentManager getFragmentManager() { - if (mPluginFragmentManager == null && getActivity() != null) { - mPluginFragmentManager = getActivity().getFragmentManager(); - } - return mPluginFragmentManager; - } - - public PluginFragmentManager getChildFragmentManager() { - FragmentManager fragmentManager = mContainerFragment.getChildFragmentManager(); - int hash = System.identityHashCode(fragmentManager); - if (hash != mChildPluginFragmentManagerHash) { - mChildPluginFragmentManagerHash = hash; - mChildPluginFragmentManager = new PluginFragmentManager(fragmentManager); - } - return mChildPluginFragmentManager; - } - - final public Resources getResources() { - if (mAttachedContext == null) { - throw new IllegalStateException("Fragment " + this + " not attached to Activity"); - } - return mAttachedContext.getResources(); - } - - public void setInitialSavedState(Fragment.SavedState state) { - - } - - public void setTargetFragment(ShadowFragment fragment, int requestCode) { - Fragment containerFragment = fragment.getContainerFragment().asFragment(); - mContainerFragment.asFragment().setTargetFragment(containerFragment, requestCode); - } - - public ShadowFragment getTargetFragment() { - IContainerFragment targetFragment - = (IContainerFragment) mContainerFragment.asFragment().getTargetFragment(); - return targetFragment.getPluginFragment(); - } - - public int getTargetRequestCode() { - return mContainerFragment.asFragment().getTargetRequestCode(); - } - - - public Context getContext() { - return mAttachedContext; - } - - - public void onHiddenChanged(boolean hidden) { - mContainerFragment.superOnHiddenChanged(hidden); - } - - - public void setRetainInstance(boolean retain) { - mContainerFragment.superSetRetainInstance(retain); - } - - - public void setHasOptionsMenu(boolean hasMenu) { - mContainerFragment.superSetHasOptionsMenu(hasMenu); - } - - - public void setMenuVisibility(boolean menuVisible) { - mContainerFragment.superSetMenuVisibility(menuVisible); - } - - - public void setUserVisibleHint(boolean isVisibleToUser) { - mContainerFragment.superSetUserVisibleHint(isVisibleToUser); - } - - - public boolean getUserVisibleHint() { - return mContainerFragment.getUserVisibleHint(); - } - - - public LoaderManager getLoaderManager() { - return null; - } - - - public void startActivity(Intent intent) { - mAttachedContext.startActivity(intent); - } - - - @TargetApi(16) - public void startActivity(Intent intent, Bundle options) { - mAttachedContext.startActivity(intent, options); - } - - - public void startActivityForResult(Intent intent, int requestCode) { - - } - - - public void startActivityForResult(Intent intent, int requestCode, Bundle options) { - - } - - - public void startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException { - - } - - - public void onActivityResult(int requestCode, int resultCode, Intent data) { - - } - - - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - - } - - - public boolean shouldShowRequestPermissionRationale(String permission) { - return false; - } - - - public LayoutInflater onGetLayoutInflater(Bundle savedInstanceState) { - return null; - } - - - public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { - - } - - - public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) { - - } - - - public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { - - } - - - public void onAttachFragment(Fragment childFragment) { - - } - - - public void onAttach(Context context) { - mAttachedContext = context; - } - - - public void onAttach(ShadowActivity activity) { - mAttachedContext = activity; - } - - - public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { - return null; - } - - - public void onCreate(Bundle savedInstanceState) { - - } - - - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return null; - } - - - public void onViewCreated(View view, Bundle savedInstanceState) { - - } - - - public View getView() { - return mContainerFragment.getView(); - } - - - public void onActivityCreated(Bundle savedInstanceState) { - - } - - - public void onViewStateRestored(Bundle savedInstanceState) { - - } - - - public void onStart() { - - } - - - public void onResume() { - - } - - - public void onSaveInstanceState(Bundle outState) { - - } - - - public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) { - - } - - - public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { - - } - - - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { - - } - - - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { - - } - - - public void onConfigurationChanged(Configuration newConfig) { - - } - - - public void onPause() { - - } - - - public void onStop() { - - } - - - public void onLowMemory() { - - } - - - public void onTrimMemory(int level) { - - } - - - public void onDestroyView() { - - } - - - public void onDestroy() { - - } - - - public void onDetach() { - - } - - - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - - } - - - public void onPrepareOptionsMenu(Menu menu) { - - } - - - public void onDestroyOptionsMenu() { - - } - - - public boolean onOptionsItemSelected(MenuItem item) { - return false; - } - - - public void onOptionsMenuClosed(Menu menu) { - - } - - - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - - } - - - public void registerForContextMenu(View view) { - - } - - - public void unregisterForContextMenu(View view) { - - } - - - public boolean onContextItemSelected(MenuItem item) { - return false; - } - - - public void setEnterSharedElementCallback(SharedElementCallback callback) { - - } - - - public void setExitSharedElementCallback(SharedElementCallback callback) { - - } - - - public void setEnterTransition(Transition transition) { - - } - - - public Transition getEnterTransition() { - return null; - } - - - public void setReturnTransition(Transition transition) { - - } - - - public Transition getReturnTransition() { - return null; - } - - - public void setExitTransition(Transition transition) { - - } - - - public Transition getExitTransition() { - return null; - } - - - public void setReenterTransition(Transition transition) { - - } - - - public Transition getReenterTransition() { - return null; - } - - - public void setSharedElementEnterTransition(Transition transition) { - - } - - - public Transition getSharedElementEnterTransition() { - return null; - } - - - public void setSharedElementReturnTransition(Transition transition) { - - } - - - public Transition getSharedElementReturnTransition() { - return null; - } - - - public void setAllowEnterTransitionOverlap(boolean allow) { - - } - - - public boolean getAllowEnterTransitionOverlap() { - return false; - } - - - public void setAllowReturnTransitionOverlap(boolean allow) { - - } - - - public boolean getAllowReturnTransitionOverlap() { - return false; - } - - - public void postponeEnterTransition() { - - } - - - public void startPostponedEnterTransition() { - - } - - - public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { - - } - - final public boolean isAdded() { - return mContainerFragment.isAdded(); - } - - final public boolean isDetached() { - return mContainerFragment.isDetached(); - } - - final public boolean isRemoving() { - return mContainerFragment.isRemoving(); - } - - final public boolean isInLayout() { - return mContainerFragment.isInLayout(); - } - - final public boolean isResumed() { - return mContainerFragment.isResumed(); - } - - final public boolean isVisible() { - return mContainerFragment.isVisible(); - } - - final public boolean isHidden() { - return mContainerFragment.isHidden(); - } - - final public int getId() { - return mContainerFragment.getId(); - } - - final public String getTag() { - return mContainerFragment.getTag(); - } - - public final CharSequence getText(int resId) { - return getResources().getText(resId); - } - - public final String getString(int resId) { - return getResources().getString(resId); - } - - public final String getString(int resId, Object... formatArgs) { - return getResources().getString(resId, formatArgs); - } - - public final void requestPermissions(String[] permissions, int requestCode) { - mContainerFragment.requestPermissions(permissions, requestCode); - } - - @SuppressLint("NewApi") - final public ShadowFragment getParentFragment() { - Fragment parentFragment = mContainerFragment.asFragment().getParentFragment(); - return ((IContainerFragment) parentFragment).getPluginFragment(); - } -} diff --git a/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/TransformManager.kt b/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/TransformManager.kt index 689ef4766..5b2368f88 100644 --- a/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/TransformManager.kt +++ b/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/TransformManager.kt @@ -35,7 +35,6 @@ class TransformManager(ctClassInputMap: Map, ActivityTransform(), ServiceTransform(), InstrumentationTransform(), - FragmentTransform(ctClassInputMap), DialogTransform(), WebViewTransform(), ContentProviderTransform(), diff --git a/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/specific/FragmentTransform.kt b/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/specific/FragmentTransform.kt deleted file mode 100644 index 760b79f9a..000000000 --- a/projects/sdk/core/transform/src/main/kotlin/com/tencent/shadow/core/transform/specific/FragmentTransform.kt +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Tencent Shadow available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.tencent.shadow.core.transform.specific - -import com.tencent.shadow.core.transform_kit.* -import javassist.CtClass -import java.io.File - -class FragmentTransform(val mCtClassInputMap: Map) : SpecificTransform() { - companion object { - const val FragmentClassname = "android.app.Fragment" - const val ShadowFragmentClassname = "com.tencent.shadow.core.runtime.ShadowFragment" - const val DialogFragmentClassname = "android.app.DialogFragment" - const val ShadowDialogFragmentClassname = "com.tencent.shadow.core.runtime.ShadowDialogFragment" - const val ContainerFragmentClassname = "com.tencent.shadow.core.runtime.ContainerFragment" - const val ContainerDialogFragmentClassname = "com.tencent.shadow.core.runtime.ContainerDialogFragment" - } - - val RenameMap = mapOf( - FragmentClassname - to ShadowFragmentClassname - , - DialogFragmentClassname - to ShadowDialogFragmentClassname - , - "android.app.FragmentManager" - to "com.tencent.shadow.core.runtime.PluginFragmentManager" - , - "android.app.FragmentTransaction" - to "com.tencent.shadow.core.runtime.PluginFragmentTransaction" - ) - - val mAppFragments: MutableSet = mutableSetOf() - val mAppDialogFragments: MutableSet = mutableSetOf() - - /** - * 当前Transform的App中的Fragment的父类,不在当前Transform的App中,但它是Fragment,记录在这个集合。 - */ - val mRuntimeSuperclassFragments: MutableSet = mutableSetOf() - - private fun CtClass.isFragment(): Boolean = isClassOf(FragmentClassname) - - private fun CtClass.isDialogFragment(): Boolean = isClassOf(DialogFragmentClassname) - - private fun String.appendFragmentAppendix() = this + "_" - - private lateinit var fragmentsName: List - - override fun setup(allInputClass: Set) { - //收集哪些当前Transform的App类是Fragment - newStep(object : TransformStep { - override fun filter(allInputClass: Set): Set = allInputClass - - override fun transform(ctClass: CtClass) { - if (ctClass.isDialogFragment()) { - mAppDialogFragments.add(ctClass) - } else if (ctClass.isFragment()) { - mAppFragments.add(ctClass) - } - } - }) - - //收集不在当前Transform的App中的类,但它是Fragment.只关心App中的Fragment的父类即可。 - newStep(object : TransformStep { - override fun filter(allInputClass: Set): Set = - listOf>(mAppDialogFragments, mAppFragments).flatten().toSet() - - override fun transform(ctClass: CtClass) { - val superclass = ctClass.superclass - if (superclass !in mAppDialogFragments - && superclass !in mAppFragments - && superclass.isFragment() - && superclass.name != FragmentClassname - && superclass.name != DialogFragmentClassname - ) { - mRuntimeSuperclassFragments.add(superclass) - } - } - }) - - //替换App中出现的所有名字 - newStep(object : TransformStep { - override fun filter(allInputClass: Set): Set = allInputClass - - override fun transform(ctClass: CtClass) { - RenameMap.forEach { - ReplaceClassName.replaceClassName(ctClass, it.key, it.value) - } - } - }) - - //将App中所有Fragment名字都加上后缀 - newStep(object : TransformStep { - override fun filter(allInputClass: Set): Set { - val flattenList = listOf( - mAppFragments, - mAppDialogFragments, - mRuntimeSuperclassFragments - ).flatten() - - fragmentsName = flattenList.flatMap { listOf(it.name) } - - return flattenList.toSet() - } - - override fun transform(ctClass: CtClass) { - val fragmentName = ctClass.name - ReplaceClassName.replaceClassName(ctClass, fragmentName, fragmentName.appendFragmentAppendix()) - } - }) - - //将App中所有对Fragment的引用也都改为加上后缀名的 - newStep(object : TransformStep { - override fun filter(allInputClass: Set): Set { - return allInputClass - } - - override fun transform(ctClass: CtClass) { - fragmentsName.forEach { fragmentName -> - ReplaceClassName.replaceClassName(ctClass, fragmentName, fragmentName.appendFragmentAppendix()) - } - } - - }) - - newStep(MakeContainerStep(mAppFragments, mClassPool[ContainerFragmentClassname])) - newStep(MakeContainerStep(mAppDialogFragments, mClassPool[ContainerDialogFragmentClassname])) - } - - inner class MakeContainerStep(private val inputClass: Set, - private val container: CtClass) - : TransformStep { - override fun filter(allInputClass: Set) = inputClass - - override fun transform(ctClass: CtClass) { - val originalFragmentName = ctClass.name.removeFragmentAppendix() - val newContainerFragmentCtClass = mClassPool.makeClass(originalFragmentName, container) - - val outputControl = mCtClassInputMap[ctClass]!! - var ctClassOriginOutputFile: File? = null - var ctClassOriginOutputEntryName: String? = null - when (outputControl) { - is DirInputClass -> { - ctClassOriginOutputFile = outputControl.getOutput(originalFragmentName) - } - is JarInputClass -> { - ctClassOriginOutputEntryName = outputControl.getOutput(originalFragmentName) - } - } - - outputControl.renameOutput(originalFragmentName, ctClass.name) - - when (outputControl) { - is DirInputClass -> { - outputControl.addOutput(newContainerFragmentCtClass.name, ctClassOriginOutputFile!!) - } - is JarInputClass -> { - outputControl.addOutput(newContainerFragmentCtClass.name, ctClassOriginOutputEntryName!!) - } - } - } - - private fun String.removeFragmentAppendix() = this.substring(0, this.length - 1) - } -} \ No newline at end of file