From b2f0f937a44a0421e5b56c38ad7632290a78186d Mon Sep 17 00:00:00 2001 From: qii Date: Thu, 17 Oct 2019 09:46:45 +0800 Subject: [PATCH] chroe: update demo, add more samples --- demo/src/main/AndroidManifest.xml | 17 +- .../scenedemo/ActivityCompatibilitySamples.kt | 78 ++++++++ .../AnimationListDemoScene.java | 9 +- .../com/bytedance/scenedemo/CaseListDemo.java | 12 +- .../com/bytedance/scenedemo/DialogSamples.kt | 53 ++++++ .../bytedance/scenedemo/GroupListDemo.java | 154 --------------- .../scenedemo/GroupSceneUsageSamples.kt | 69 +++++++ .../scenedemo/LifeCycleListScene.java | 2 +- .../java/com/bytedance/scenedemo/MainScene.kt | 12 +- .../com/bytedance/scenedemo/MigrateSamples.kt | 48 +++++ .../scenedemo/MultiStackDemoScene.kt | 48 +++++ .../scenedemo/NavigationListDemo.java | 180 ------------------ .../bytedance/scenedemo/NavigationListDemo.kt | 99 ++++++++++ .../bytedance/scenedemo/PatternsSamples.kt | 59 ++++++ .../ActivityCompatibilitySamples.kt | 94 --------- .../SceneGetActivityResultSample.java} | 28 +-- .../configuration/ConfigurationDemoScene.java | 2 +- .../ActivityGetSceneResultSampleActivity.java | 114 +++++++++++ .../softkeyboard/SoftKeyboardDemoScene.java | 2 +- .../softkeyboard/SoftKeyboardResizeScene.java | 2 +- .../theme/ThemeDemo.java | 13 +- .../window/WindowColorDemo.java | 2 +- .../window/WindowDemo.java | 2 +- .../window/WindowLayoutDemo.java | 2 +- .../animation/SlideBackButtonDemoScene.java | 1 + .../architecture_patterns/PatternsSamples.kt | 74 ------- .../livedata/LiveDataScene.java | 2 +- .../scenedemo/benchmark/BenchmarkSamples.kt | 39 ++++ .../scenedemo/dialog/DialogListDemoScene.java | 92 --------- .../{case0 => extreme_case}/Case0Scene.java | 2 +- .../{case0 => extreme_case}/Case1Scene.java | 2 +- .../{case0 => extreme_case}/Case2Scene.java | 2 +- .../{case0 => extreme_case}/Case3Scene.java | 2 +- .../{case0 => extreme_case}/Case4Scene.java | 2 +- .../{case0 => extreme_case}/Case5Scene.java | 2 +- .../async_inflate/AsyncInflateSceneDemo.java | 2 +- .../async_inflate/TestAsyncView.java | 2 +- .../GroupSceneBasicUsageSample.java} | 41 ++-- .../group/inherited/InheritedDemo.java | 52 ++--- .../placeholder/PlaceHolderViewSample.kt | 14 ++ .../FragmentBindingDemoActivity.java | 2 +- .../TestSceneDelegateToViewView.java | 4 +- .../TestSceneToViewActivity.java | 4 +- ...grateFromClassicActivityFragmentSamples.kt | 128 +++++++++++++ .../multi_stack/MultiStackDemoScene.java | 70 ------- .../ActivityToSceneDemoActivity.java | 130 ------------- .../push_pop/PushPopBasicUsageDemoScene.kt | 43 +++++ .../navigation/push_pop/PushPopDemoScene.java | 60 ------ .../bytedance/scenedemo/utility/Utility.kt | 52 +++++ .../scenedemo/view/ClassPathInfoTextView.kt | 16 ++ demo/src/main/res/layout/basic_layout.xml | 36 ++-- .../res/layout/group_scene_page_block.xml | 28 +-- ...migrate_from_classic_activity_fragment.xml | 16 ++ .../res/layout/layout_test_async_layout.xml | 2 +- .../res/layout/nav_scene_result_layout.xml | 41 ++-- demo/src/main/res/menu/navigation_view.xml | 6 + demo/src/main/res/values-zh/strings.xml | 11 +- demo/src/main/res/values/strings.xml | 12 +- 58 files changed, 1053 insertions(+), 1040 deletions(-) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/ActivityCompatibilitySamples.kt rename demo/src/main/java/com/bytedance/scenedemo/{animation => }/AnimationListDemoScene.java (91%) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/DialogSamples.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/GroupListDemo.java create mode 100644 demo/src/main/java/com/bytedance/scenedemo/GroupSceneUsageSamples.kt create mode 100644 demo/src/main/java/com/bytedance/scenedemo/MigrateSamples.kt create mode 100644 demo/src/main/java/com/bytedance/scenedemo/MultiStackDemoScene.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.java create mode 100644 demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.kt create mode 100644 demo/src/main/java/com/bytedance/scenedemo/PatternsSamples.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/ActivityCompatibilitySamples.kt rename demo/src/main/java/com/bytedance/scenedemo/{navigation/forresult/SceneResultRootScene.java => activity_compatibility/activity_result/SceneGetActivityResultSample.java} (73%) rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/configuration/ConfigurationDemoScene.java (96%) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/scene_result/ActivityGetSceneResultSampleActivity.java rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/softkeyboard/SoftKeyboardDemoScene.java (98%) rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/softkeyboard/SoftKeyboardResizeScene.java (97%) rename demo/src/main/java/com/bytedance/scenedemo/{ => activity_compatibility}/theme/ThemeDemo.java (89%) rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/window/WindowColorDemo.java (96%) rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/window/WindowDemo.java (96%) rename demo/src/main/java/com/bytedance/scenedemo/{navigation => activity_compatibility}/window/WindowLayoutDemo.java (97%) delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/PatternsSamples.kt rename demo/src/main/java/com/bytedance/scenedemo/{ => architecture_patterns}/livedata/LiveDataScene.java (98%) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/benchmark/BenchmarkSamples.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/dialog/DialogListDemoScene.java rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case0Scene.java (99%) rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case1Scene.java (99%) rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case2Scene.java (98%) rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case3Scene.java (99%) rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case4Scene.java (99%) rename demo/src/main/java/com/bytedance/scenedemo/{case0 => extreme_case}/Case5Scene.java (99%) rename demo/src/main/java/com/bytedance/scenedemo/{ => group}/async_inflate/AsyncInflateSceneDemo.java (96%) rename demo/src/main/java/com/bytedance/scenedemo/{ => group}/async_inflate/TestAsyncView.java (94%) rename demo/src/main/java/com/bytedance/scenedemo/group/{pageblock/PageBlockGroupScene.java => basic_usage/GroupSceneBasicUsageSample.java} (72%) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/group/placeholder/PlaceHolderViewSample.kt rename demo/src/main/java/com/bytedance/scenedemo/{group/fragment => migrate}/FragmentBindingDemoActivity.java (98%) rename demo/src/main/java/com/bytedance/scenedemo/{group/fragment => migrate}/TestSceneDelegateToViewView.java (97%) rename demo/src/main/java/com/bytedance/scenedemo/{group/fragment => migrate}/TestSceneToViewActivity.java (93%) create mode 100644 demo/src/main/java/com/bytedance/scenedemo/migrate/migrate_from_classic_activity_fragment/MigrateFromClassicActivityFragmentSamples.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/multi_stack/MultiStackDemoScene.java delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/ActivityToSceneDemoActivity.java create mode 100644 demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopBasicUsageDemoScene.kt delete mode 100644 demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopDemoScene.java create mode 100644 demo/src/main/java/com/bytedance/scenedemo/utility/Utility.kt create mode 100644 demo/src/main/java/com/bytedance/scenedemo/view/ClassPathInfoTextView.kt create mode 100644 demo/src/main/res/layout/layout_migrate_from_classic_activity_fragment.xml diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 9984ffee..20ca3fed 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -1,9 +1,8 @@ + xmlns:tools="http://schemas.android.com/tools" + package="com.bytedance.scenedemo"> - + android:configChanges="orientation|screenSize|keyboardHidden" + android:windowSoftInputMode="adjustNothing"> @@ -23,11 +22,13 @@ - - + + - + + + \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/ActivityCompatibilitySamples.kt b/demo/src/main/java/com/bytedance/scenedemo/ActivityCompatibilitySamples.kt new file mode 100644 index 00000000..24037ed9 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/ActivityCompatibilitySamples.kt @@ -0,0 +1,78 @@ +package com.bytedance.scenedemo + +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.Toast +import com.bytedance.scene.Scene +import com.bytedance.scene.interfaces.PermissionResultCallback +import com.bytedance.scene.ktx.requestPermissions +import com.bytedance.scenedemo.activity_compatibility.activity_result.SceneGetActivityResultSample +import com.bytedance.scenedemo.activity_compatibility.configuration.ConfigurationDemoScene +import com.bytedance.scenedemo.activity_compatibility.softkeyboard.SoftKeyboardDemoScene +import com.bytedance.scenedemo.activity_compatibility.theme.ThemeDemo +import com.bytedance.scenedemo.activity_compatibility.window.WindowDemo +import com.bytedance.scenedemo.activity_compatibility.scene_result.ActivityGetSceneResultSampleActivity +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + + +class ActivityCompatibilitySamples : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(requireSceneContext()) + + val layout = LinearLayout(requireSceneContext()) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.main_activity_btn_scene_get_activity_result), View.OnClickListener { + requireNavigationScene().push(SceneGetActivityResultSample::class.java) + }) + addButton(layout, getString(R.string.main_activity_btn_activity_get_scene_result), View.OnClickListener { + requireNavigationScene().startActivity(Intent(requireActivity(), ActivityGetSceneResultSampleActivity::class.java)) + }) + addButton(layout, getString(R.string.nav_result_permission), View.OnClickListener { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 123, PermissionResultCallback { + if (it != null && it.isNotEmpty() + && it[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(activity, getString(R.string.nav_result_permission_tip_success), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(activity, getString(R.string.nav_result_permission_tip_failed), Toast.LENGTH_SHORT).show() + } + }) + } + }) + addButton(layout, getString(R.string.main_nav_btn_configuration_change), View.OnClickListener { + requireNavigationScene().push(ConfigurationDemoScene::class.java) + }) + addButton(layout, getString(R.string.main_nav_btn_ime), View.OnClickListener { + requireNavigationScene().push(SoftKeyboardDemoScene::class.java) + }) + addButton(layout, getString(R.string.main_nav_btn_theme), View.OnClickListener { + requireNavigationScene().push(ThemeDemo::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_modify_activity_states), View.OnClickListener { + requireNavigationScene().push(WindowDemo::class.java) + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/animation/AnimationListDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/AnimationListDemoScene.java similarity index 91% rename from demo/src/main/java/com/bytedance/scenedemo/animation/AnimationListDemoScene.java rename to demo/src/main/java/com/bytedance/scenedemo/AnimationListDemoScene.java index eb9f8513..a9f518be 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/animation/AnimationListDemoScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/AnimationListDemoScene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.animation; +package com.bytedance.scenedemo; import android.os.Bundle; import android.support.annotation.NonNull; @@ -12,14 +12,17 @@ import android.widget.TextView; import com.bytedance.scene.group.UserVisibleHintGroupScene; -import com.bytedance.scenedemo.R; +import com.bytedance.scenedemo.animation.AnimationResDemoScene; +import com.bytedance.scenedemo.animation.SlideBackButtonDemoScene; +import com.bytedance.scenedemo.animation.SwipeBackDemo; +import com.bytedance.scenedemo.animation.TransitionDemo; /** * Created by JiangQi on 8/9/18. */ public class AnimationListDemoScene extends UserVisibleHintGroupScene { - Button mInteractionButton; + public Button mInteractionButton; @NonNull @Override diff --git a/demo/src/main/java/com/bytedance/scenedemo/CaseListDemo.java b/demo/src/main/java/com/bytedance/scenedemo/CaseListDemo.java index 99ab6d7e..31f801fc 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/CaseListDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/CaseListDemo.java @@ -14,12 +14,12 @@ import android.widget.TextView; import com.bytedance.scene.group.UserVisibleHintGroupScene; -import com.bytedance.scenedemo.case0.Case0Scene; -import com.bytedance.scenedemo.case0.Case1Scene; -import com.bytedance.scenedemo.case0.Case2Scene; -import com.bytedance.scenedemo.case0.Case3Scene; -import com.bytedance.scenedemo.case0.Case4Scene; -import com.bytedance.scenedemo.case0.Case5Scene; +import com.bytedance.scenedemo.extreme_case.Case0Scene; +import com.bytedance.scenedemo.extreme_case.Case1Scene; +import com.bytedance.scenedemo.extreme_case.Case2Scene; +import com.bytedance.scenedemo.extreme_case.Case3Scene; +import com.bytedance.scenedemo.extreme_case.Case4Scene; +import com.bytedance.scenedemo.extreme_case.Case5Scene; import com.bytedance.scenedemo.restore.SupportRestoreActivity; /** diff --git a/demo/src/main/java/com/bytedance/scenedemo/DialogSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/DialogSamples.kt new file mode 100644 index 00000000..4141d4a9 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/DialogSamples.kt @@ -0,0 +1,53 @@ +package com.bytedance.scenedemo + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.Toast +import com.bytedance.scene.Scene +import com.bytedance.scene.animation.animatorexecutor.DialogSceneAnimatorExecutor +import com.bytedance.scene.interfaces.PushOptions +import com.bytedance.scenedemo.dialog.DemoDialogScene +import com.bytedance.scenedemo.dialog.DemoDialogWithDimScene +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + + +class DialogSamples : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(activity) + + val layout = LinearLayout(activity) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.part_dialog_btn_1), View.OnClickListener { + requireNavigationScene().push(DemoDialogScene::class.java, null, PushOptions.Builder() + .setTranslucent(true).setAnimation(DialogSceneAnimatorExecutor()).build()) + }) + addButton(layout, getString(R.string.part_dialog_btn_2), View.OnClickListener { + requireNavigationScene().push(DemoDialogWithDimScene::class.java, null, PushOptions.Builder() + .setTranslucent(true).setAnimation(DialogSceneAnimatorExecutor()).build()) + }) + addButton(layout, getString(R.string.part_dialog_btn_3), View.OnClickListener { + Toast.makeText(requireApplicationContext(),"TODO",Toast.LENGTH_SHORT).show() + }) + addButton(layout, getString(R.string.main_part_btn_floating_window), View.OnClickListener { + Toast.makeText(requireApplicationContext(),"TODO",Toast.LENGTH_SHORT).show() + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/GroupListDemo.java b/demo/src/main/java/com/bytedance/scenedemo/GroupListDemo.java deleted file mode 100644 index 16031dbc..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/GroupListDemo.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.bytedance.scenedemo; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.ScrollView; -import android.widget.Space; -import android.widget.TextView; -import android.widget.Toast; - -import com.bytedance.scene.group.UserVisibleHintGroupScene; -import com.bytedance.scenedemo.async_inflate.AsyncInflateSceneDemo; -import com.bytedance.scenedemo.group.drawer.DrawerGroupScene; -import com.bytedance.scenedemo.group.fragment.FragmentBindingDemoActivity; -import com.bytedance.scenedemo.group.fragment.TestSceneToViewActivity; -import com.bytedance.scenedemo.group.inherited.InheritedDemo; -import com.bytedance.scenedemo.group.pageblock.PageBlockGroupScene; -import com.bytedance.scenedemo.group.viewpager.ViewPagerGroupScene; -import com.bytedance.scenedemo.multi_stack.MultiStackTabGroupScene; - -/** - * Created by JiangQi on 8/21/18. - */ -public class GroupListDemo extends UserVisibleHintGroupScene { - - @NonNull - @Override - public ViewGroup onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - ScrollView scrollView = new ScrollView(getActivity()); - - LinearLayout layout = new LinearLayout(getActivity()); - layout.setOrientation(LinearLayout.VERTICAL); - - scrollView.addView(layout); - - addSpace(layout, 12); - addTitle(layout, getString(R.string.main_title_basic)); - - addButton(layout, getString(R.string.main_part_btn_child_scene), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PageBlockGroupScene.class); - } - }); - - addButton(layout, getString(R.string.main_part_btn_scene_place_holder_view), new View.OnClickListener() { - @Override - public void onClick(View v) { - Toast.makeText(requireActivity(), "TODO", Toast.LENGTH_SHORT).show(); - } - }); - - addTitle(layout, getString(R.string.main_title_basic)); - - addButton(layout, getString(R.string.main_part_btn_tab_view_pager), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(ViewPagerGroupScene.class); - } - }); - - addButton(layout, getString(R.string.main_part_btn_drawer), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(DrawerGroupScene.class); - } - }); - - addButton(layout, getString(R.string.main_part_btn_bottom_tab_layout), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(MultiStackTabGroupScene.class); - } - }); - - addTitle(layout, getString(R.string.main_title_pro)); - - addButton(layout, getString(R.string.main_part_btn_bind_to_fragment), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().startActivity(new Intent(getActivity(), FragmentBindingDemoActivity.class)); - } - }); - - addButton(layout, getString(R.string.main_part_btn_bind_to_view), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().startActivity(new Intent(getActivity(), TestSceneToViewActivity.class)); - } - }); - - addButton(layout, getString(R.string.main_part_btn_async_inflate), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(AsyncInflateSceneDemo.class); - } - }); - - addButton(layout, getString(R.string.main_part_btn_inherited_scene), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(InheritedDemo.class); - } - }); - - addTitle(layout, getString(R.string.main_title_todo)); - - addButton(layout, getString(R.string.main_part_btn_floating_window), new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - - addSpace(layout, 100); - - return scrollView; - } - - private void addTitle(LinearLayout parent, String text) { - TextView textView = new TextView(getActivity()); - textView.setTextSize(14); - textView.setText(text); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lp.leftMargin = 30; - lp.rightMargin = 30; - lp.topMargin = 24; - lp.bottomMargin = 24; - parent.addView(textView, lp); - } - - private Button addButton(LinearLayout parent, String text, View.OnClickListener onClickListener) { - Button button = new Button(getActivity()); - button.setAllCaps(false); - button.setText(text); - button.setOnClickListener(onClickListener); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 150); - lp.leftMargin = 20; - lp.rightMargin = 20; - parent.addView(button, lp); - return button; - } - - private void addSpace(LinearLayout parent, int height) { - Space space = new Space(getActivity()); - parent.addView(space, ViewGroup.LayoutParams.MATCH_PARENT, height); - } -} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/GroupSceneUsageSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/GroupSceneUsageSamples.kt new file mode 100644 index 00000000..ecc3c275 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/GroupSceneUsageSamples.kt @@ -0,0 +1,69 @@ +package com.bytedance.scenedemo + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.group.UserVisibleHintGroupScene +import com.bytedance.scenedemo.group.async_inflate.AsyncInflateSceneDemo +import com.bytedance.scenedemo.group.drawer.DrawerGroupScene +import com.bytedance.scenedemo.group.inherited.InheritedDemo +import com.bytedance.scenedemo.group.basic_usage.GroupSceneBasicUsageSample +import com.bytedance.scenedemo.group.placeholder.PlaceHolderViewSample +import com.bytedance.scenedemo.group.viewpager.ViewPagerGroupScene +import com.bytedance.scenedemo.multi_stack.MultiStackTabGroupScene +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + +class GroupSceneUsageSamples : UserVisibleHintGroupScene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): ViewGroup { + val scrollView = ScrollView(requireSceneContext()) + + val layout = LinearLayout(requireSceneContext()) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.main_part_btn_child_scene), View.OnClickListener { + requireNavigationScene().push(GroupSceneBasicUsageSample::class.java) + }) + + addButton(layout, getString(R.string.main_part_btn_scene_place_holder_view), View.OnClickListener { + requireNavigationScene().push(PlaceHolderViewSample::class.java) + }) + + addButton(layout, getString(R.string.main_part_btn_tab_view_pager), View.OnClickListener { + requireNavigationScene().push(ViewPagerGroupScene::class.java) + }) + + addButton(layout, getString(R.string.main_part_btn_drawer), View.OnClickListener { + requireNavigationScene().push(DrawerGroupScene::class.java) + }) + + addButton(layout, getString(R.string.main_part_btn_bottom_tab_layout), View.OnClickListener { + requireNavigationScene().push(MultiStackTabGroupScene::class.java) + }) + + addTitle(layout, getString(R.string.main_title_pro)); + + addButton(layout, getString(R.string.main_part_btn_async_inflate), View.OnClickListener { + requireNavigationScene().push(AsyncInflateSceneDemo::class.java) + }) + + addButton(layout, getString(R.string.main_part_btn_inherited_scene), View.OnClickListener { + requireNavigationScene().push(InheritedDemo::class.java) + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/LifeCycleListScene.java b/demo/src/main/java/com/bytedance/scenedemo/LifeCycleListScene.java index f4d904d6..dada7fa3 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/LifeCycleListScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/LifeCycleListScene.java @@ -15,7 +15,7 @@ import com.bytedance.scenedemo.animation.AnimationResDemoScene; import com.bytedance.scenedemo.lifecycle.ChildSceneLifecycleCallbacksDemoScene; import com.bytedance.scenedemo.lifecycle.LifeCycleDemoScene; -import com.bytedance.scenedemo.livedata.LiveDataScene; +import com.bytedance.scenedemo.architecture_patterns.livedata.LiveDataScene; /** * Created by JiangQi on 8/21/18. diff --git a/demo/src/main/java/com/bytedance/scenedemo/MainScene.kt b/demo/src/main/java/com/bytedance/scenedemo/MainScene.kt index a68ac533..bf10fbc0 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/MainScene.kt +++ b/demo/src/main/java/com/bytedance/scenedemo/MainScene.kt @@ -6,11 +6,7 @@ import android.os.Bundle import android.view.View import com.bytedance.scene.Scene import com.bytedance.scene.ui.template.NavigationViewScene -import com.bytedance.scenedemo.activity_compatibility.ActivityCompatibilitySamples -import com.bytedance.scenedemo.animation.AnimationListDemoScene -import com.bytedance.scenedemo.architecture_patterns.PatternsSamples -import com.bytedance.scenedemo.dialog.DialogListDemoScene -import com.bytedance.scenedemo.multi_stack.MultiStackDemoScene +import com.bytedance.scenedemo.benchmark.BenchmarkSamples import com.bytedance.scenedemo.router.RouterSample @@ -24,11 +20,13 @@ class MainScene : NavigationViewScene() { map[R.id.navigation] = NavigationListDemo() map[R.id.navigation_multi_stack] = MultiStackDemoScene() map[R.id.navigation_router] = RouterSample() - map[R.id.group] = GroupListDemo() - map[R.id.dialog] = DialogListDemoScene() + map[R.id.group] = GroupSceneUsageSamples() + map[R.id.dialog] = DialogSamples() map[R.id.animation] = AnimationListDemoScene() map[R.id.architecture_patterns] = PatternsSamples() map[R.id.activity_compatibility] = ActivityCompatibilitySamples() + map[R.id.migrate] = MigrateSamples() + map[R.id.benchmark] = BenchmarkSamples() map[R.id.extreme_case] = CaseListDemo() return map } diff --git a/demo/src/main/java/com/bytedance/scenedemo/MigrateSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/MigrateSamples.kt new file mode 100644 index 00000000..99af717b --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/MigrateSamples.kt @@ -0,0 +1,48 @@ +package com.bytedance.scenedemo + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.Scene +import com.bytedance.scenedemo.migrate.FragmentBindingDemoActivity +import com.bytedance.scenedemo.migrate.TestSceneToViewActivity +import com.bytedance.scenedemo.migrate.migrate_from_classic_activity_fragment.MigrateFromClassicAndroidActivitySamplesActivity +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + + +class MigrateSamples : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(activity) + + val layout = LinearLayout(activity) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.main_part_btn_bind_navigationscene_to_fragment), View.OnClickListener { + requireNavigationScene().startActivity(Intent(activity, FragmentBindingDemoActivity::class.java)) + }) + addButton(layout, getString(R.string.main_part_btn_bind_to_view), View.OnClickListener { + requireNavigationScene().startActivity(Intent(activity, TestSceneToViewActivity::class.java)) + }) + + addButton(layout, getString(R.string.main_part_btn_migrate_from_classic_android_app), View.OnClickListener { + requireNavigationScene().startActivity(Intent(activity, MigrateFromClassicAndroidActivitySamplesActivity::class.java)) + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/MultiStackDemoScene.kt b/demo/src/main/java/com/bytedance/scenedemo/MultiStackDemoScene.kt new file mode 100644 index 00000000..ade1c2e0 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/MultiStackDemoScene.kt @@ -0,0 +1,48 @@ +package com.bytedance.scenedemo; + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.Scene +import com.bytedance.scene.animation.animatorexecutor.HorizontalTransitionAnimatorExecutor +import com.bytedance.scene.interfaces.PushOptions +import com.bytedance.scene.navigation.NavigationScene +import com.bytedance.scene.navigation.NavigationSceneOptions +import com.bytedance.scenedemo.multi_stack.MultiStackTabGroupScene +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + +/** + * Created by JiangQi on 9/11/18. + */ +class MultiStackDemoScene : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(requireSceneContext()) + + val layout = LinearLayout(requireSceneContext()) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.nav_multi_stack_btn_1), View.OnClickListener { + requireNavigationScene().push(NavigationScene::class.java, NavigationSceneOptions(MainScene::class.java, null).toBundle()) + }) + addButton(layout, getString(R.string.nav_multi_stack_btn_2), View.OnClickListener { + requireNavigationScene().push(NavigationScene::class.java, NavigationSceneOptions(MainScene::class.java, null).toBundle() + , PushOptions.Builder().setAnimation(HorizontalTransitionAnimatorExecutor()).build()) + }) + addButton(layout, getString(R.string.nav_multi_stack_btn_3), View.OnClickListener { + requireNavigationScene().push(MultiStackTabGroupScene::class.java) + }) + return scrollView + } +} diff --git a/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.java b/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.java deleted file mode 100644 index 71b47184..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.bytedance.scenedemo; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.ScrollView; -import android.widget.Space; -import android.widget.TextView; - -import com.bytedance.scene.group.UserVisibleHintGroupScene; -import com.bytedance.scenedemo.navigation.forresult.SceneResultScene_0; -import com.bytedance.scenedemo.navigation.performance.PerformanceDemo; -import com.bytedance.scenedemo.navigation.popinterupt.PopInterruptScene; -import com.bytedance.scenedemo.navigation.popto.PopToScene; -import com.bytedance.scenedemo.navigation.push_clear_current.PushClearCurrentDemoScene; -import com.bytedance.scenedemo.navigation.push_pop.PushPopDemoScene; -import com.bytedance.scenedemo.navigation.push_singletop.PushSingleTopRootScene; -import com.bytedance.scenedemo.navigation.pushandclear.PushClearTaskScene; -import com.bytedance.scenedemo.navigation.remove.RemoveDemoScene; -import com.bytedance.scenedemo.navigation.reuse.ReuseDemoScene; -import com.bytedance.scenedemo.navigation.singletask.SingleTaskDemoScene; -import com.bytedance.scenedemo.template.DefaultScene; - -import org.jetbrains.annotations.NotNull; - -/** - * Created by JiangQi on 8/21/18. - */ -public class NavigationListDemo extends UserVisibleHintGroupScene { - - @NonNull - @Override - public ViewGroup onCreateView(@NotNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - ScrollView scrollView = new ScrollView(getActivity()); - - LinearLayout layout = new LinearLayout(getActivity()); - layout.setOrientation(LinearLayout.VERTICAL); - - scrollView.addView(layout); - - addSpace(layout, 12); - addTitle(layout, getString(R.string.main_title_basic)); - - addButton(layout, getString(R.string.main_nav_btn_push_pop), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PushPopDemoScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_single_top), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PushSingleTopRootScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_single_task), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(SingleTaskDemoScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_clear_task), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PushClearTaskScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_clear_current), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PushClearCurrentDemoScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_remove), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(RemoveDemoScene.class); - } - }); - - addTitle(layout, getString(R.string.main_title_pro)); - - addButton(layout, getString(R.string.main_nav_btn_pop_to), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PopToScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_interrupt_pop), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PopInterruptScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_for_result), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(SceneResultScene_0.class); - } - }); - - addTitle(layout, getString(R.string.main_title_other)); - - addButton(layout, getString(R.string.main_nav_btn_reuse), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(ReuseDemoScene.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_compare_activity), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(PerformanceDemo.class); - } - }); - - addButton(layout, getString(R.string.main_nav_btn_app_compat), new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(DefaultScene.class); - } - }); - - addTitle(layout, getString(R.string.main_title_todo)); - - addButton(layout, getString(R.string.main_nav_btn_deep_link), new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - - addSpace(layout, 100); - - return scrollView; - } - - private void addTitle(LinearLayout parent, String text) { - TextView textView = new TextView(getActivity()); - textView.setTextSize(14); - textView.setText(text); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lp.leftMargin = 30; - lp.rightMargin = 30; - lp.topMargin = 24; - lp.bottomMargin = 24; - parent.addView(textView, lp); - } - - private Button addButton(LinearLayout parent, String text, View.OnClickListener onClickListener) { - Button button = new Button(getActivity()); - button.setAllCaps(false); - button.setText(text); - button.setOnClickListener(onClickListener); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 150); - lp.leftMargin = 20; - lp.rightMargin = 20; - parent.addView(button, lp); - return button; - } - - private void addSpace(LinearLayout parent, int height) { - Space space = new Space(getActivity()); - parent.addView(space, ViewGroup.LayoutParams.MATCH_PARENT, height); - } - -} diff --git a/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.kt b/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.kt new file mode 100644 index 00000000..cdab928f --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/NavigationListDemo.kt @@ -0,0 +1,99 @@ +package com.bytedance.scenedemo; + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.group.UserVisibleHintGroupScene +import com.bytedance.scenedemo.navigation.forresult.SceneResultScene_0 +import com.bytedance.scenedemo.navigation.popinterupt.PopInterruptScene +import com.bytedance.scenedemo.navigation.popto.PopToScene +import com.bytedance.scenedemo.navigation.push_clear_current.PushClearCurrentDemoScene +import com.bytedance.scenedemo.navigation.push_pop.PushPopBasicUsageDemoScene +import com.bytedance.scenedemo.navigation.push_singletop.PushSingleTopRootScene +import com.bytedance.scenedemo.navigation.pushandclear.PushClearTaskScene +import com.bytedance.scenedemo.navigation.remove.RemoveDemoScene +import com.bytedance.scenedemo.navigation.reuse.ReuseDemoScene +import com.bytedance.scenedemo.navigation.singletask.SingleTaskDemoScene +import com.bytedance.scenedemo.template.DefaultScene +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + +/** + * Created by JiangQi on 8/21/18. + */ +class NavigationListDemo : UserVisibleHintGroupScene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): ViewGroup { + val scrollView = ScrollView(requireSceneContext()) + + val layout = LinearLayout(requireSceneContext()) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.main_nav_btn_push_pop), View.OnClickListener { + requireNavigationScene().push(PushPopBasicUsageDemoScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_single_top), View.OnClickListener { + requireNavigationScene().push(PushSingleTopRootScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_single_task), View.OnClickListener { + requireNavigationScene().push(SingleTaskDemoScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_clear_task), View.OnClickListener { + requireNavigationScene().push(PushClearTaskScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_clear_current), View.OnClickListener { + requireNavigationScene().push(PushClearCurrentDemoScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_remove), View.OnClickListener { + requireNavigationScene().push(RemoveDemoScene::class.java) + }) + + addTitle(layout, getString(R.string.main_title_pro)); + + addButton(layout, getString(R.string.main_nav_btn_pop_to), View.OnClickListener { + requireNavigationScene().push(PopToScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_interrupt_pop), View.OnClickListener { + requireNavigationScene().push(PopInterruptScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_for_result), View.OnClickListener { + requireNavigationScene().push(SceneResultScene_0::class.java) + }) + + addTitle(layout, getString(R.string.main_title_other)); + + addButton(layout, getString(R.string.main_nav_btn_reuse), View.OnClickListener { + requireNavigationScene().push(ReuseDemoScene::class.java) + }) + + addButton(layout, getString(R.string.main_nav_btn_app_compat), View.OnClickListener { + requireNavigationScene().push(DefaultScene::class.java) + }) + + addTitle(layout, getString(R.string.main_title_todo)) + addButton(layout, getString(R.string.main_nav_btn_deep_link), View.OnClickListener { + + }) + + addSpace(layout, 100) + + return scrollView + } +} diff --git a/demo/src/main/java/com/bytedance/scenedemo/PatternsSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/PatternsSamples.kt new file mode 100644 index 00000000..90a9ec00 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/PatternsSamples.kt @@ -0,0 +1,59 @@ +package com.bytedance.scenedemo + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.Toast +import com.bytedance.scene.Scene +import com.bytedance.scenedemo.architecture_patterns.mvvm.ViewModelSceneSamples +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + + +class PatternsSamples : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(activity) + + val layout = LinearLayout(activity) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.patterns_scope), View.OnClickListener { + Toast.makeText(requireApplicationContext(), "TODO", Toast.LENGTH_SHORT).show() + }) + + addButton(layout, getString(R.string.patterns_mvp), View.OnClickListener { + Toast.makeText(requireApplicationContext(), "TODO", Toast.LENGTH_SHORT).show() + }) + + addButton(layout, getString(R.string.patterns_mvp), View.OnClickListener { + Toast.makeText(requireApplicationContext(), "TODO", Toast.LENGTH_SHORT).show() + }) + + addButton(layout, getString(R.string.patterns_mvvm), View.OnClickListener { + requireNavigationScene().push(ViewModelSceneSamples::class.java) + }) + + addButton(layout, getString(R.string.patterns_mvi), View.OnClickListener { + Toast.makeText(requireApplicationContext(), "TODO", Toast.LENGTH_SHORT).show() + }) + + addButton(layout, getString(R.string.patterns_viper), View.OnClickListener { + Toast.makeText(requireApplicationContext(), "TODO", Toast.LENGTH_SHORT).show() + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/ActivityCompatibilitySamples.kt b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/ActivityCompatibilitySamples.kt deleted file mode 100644 index d5201f49..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/ActivityCompatibilitySamples.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.bytedance.scenedemo.activity_compatibility - -import android.Manifest -import android.content.pm.PackageManager -import android.os.Build -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.* -import com.bytedance.scene.Scene -import com.bytedance.scenedemo.R -import com.bytedance.scenedemo.navigation.configuration.ConfigurationDemoScene -import com.bytedance.scenedemo.navigation.forresult.SceneResultRootScene -import com.bytedance.scenedemo.navigation.softkeyboard.SoftKeyboardDemoScene -import com.bytedance.scenedemo.navigation.window.WindowDemo -import com.bytedance.scenedemo.theme.ThemeDemo - - -class ActivityCompatibilitySamples : Scene() { - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { - val scrollView = ScrollView(activity) - - val layout = LinearLayout(activity) - layout.orientation = LinearLayout.VERTICAL - - scrollView.addView(layout) - - addSpace(layout, 12) - addTitle(layout, getString(R.string.main_title_basic)) - - addButton(layout, getString(R.string.main_activity_btn_for_result), View.OnClickListener { - requireNavigationScene().push(SceneResultRootScene::class.java) - }) - addButton(layout, getString(R.string.nav_result_permission), View.OnClickListener { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - requireNavigationScene().requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 123) { grantResults -> - if (grantResults != null && grantResults.isNotEmpty() - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(activity, getString(R.string.nav_result_permission_tip_success), Toast.LENGTH_SHORT).show() - } else { - Toast.makeText(activity, getString(R.string.nav_result_permission_tip_failed), Toast.LENGTH_SHORT).show() - } - } - } - }) - addButton(layout, getString(R.string.main_nav_btn_configuration_change), View.OnClickListener { - requireNavigationScene().push(ConfigurationDemoScene::class.java) - }) - addButton(layout, getString(R.string.main_nav_btn_ime), View.OnClickListener { - requireNavigationScene().push(SoftKeyboardDemoScene::class.java) - }) - addButton(layout, getString(R.string.main_nav_btn_theme), View.OnClickListener { - requireNavigationScene().push(ThemeDemo::class.java) - }) - - addButton(layout, getString(R.string.main_nav_btn_modify_activity_states), View.OnClickListener { - requireNavigationScene().push(WindowDemo::class.java) - }) - - addSpace(layout, 100) - - return scrollView - } - - private fun addTitle(parent: LinearLayout, text: String) { - val textView = TextView(activity) - textView.textSize = 14f - textView.text = text - val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - lp.leftMargin = 30 - lp.rightMargin = 30 - lp.topMargin = 24 - lp.bottomMargin = 24 - parent.addView(textView, lp) - } - - private fun addButton(parent: LinearLayout, text: String, onClickListener: View.OnClickListener): Button { - val button = Button(activity) - button.isAllCaps = false - button.text = text - button.setOnClickListener(onClickListener) - val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 150) - lp.leftMargin = 20 - lp.rightMargin = 20 - parent.addView(button, lp) - return button - } - - private fun addSpace(parent: LinearLayout, height: Int) { - val space = Space(activity) - parent.addView(space, ViewGroup.LayoutParams.MATCH_PARENT, height) - } -} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/SceneResultRootScene.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/activity_result/SceneGetActivityResultSample.java similarity index 73% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/SceneResultRootScene.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/activity_result/SceneGetActivityResultSample.java index f07376e4..be59de26 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/SceneResultRootScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/activity_result/SceneGetActivityResultSample.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.forresult; +package com.bytedance.scenedemo.activity_compatibility.activity_result; import android.app.Activity; import android.content.Intent; @@ -12,32 +12,27 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; -import com.bytedance.scene.Scene; import com.bytedance.scene.interfaces.ActivityResultCallback; +import com.bytedance.scene.ui.template.AppCompatScene; import com.bytedance.scenedemo.R; -import com.bytedance.scenedemo.utility.ColorUtil; +import com.bytedance.scenedemo.navigation.forresult.TestActivityResultActivity; /** * Created by JiangQi on 8/3/18. */ -public class SceneResultRootScene extends Scene { - - @NonNull +public class SceneGetActivityResultSample extends AppCompatScene { + @Nullable @Override - public ViewGroup onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + protected View onCreateContentView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container, @Nullable Bundle savedInstanceState) { return (ViewGroup) inflater.inflate(R.layout.nav_scene_result_layout, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - getView().setBackgroundColor(ColorUtil.getMaterialColor(getResources(), 0)); - - TextView name = getView().findViewById(R.id.name); - name.setText(getNavigationScene().getStackHistory()); + setTitle(R.string.main_activity_btn_scene_get_activity_result); final ImageView image = getView().findViewById(R.id.image); Button btn2 = getView().findViewById(R.id.btn2); @@ -76,14 +71,5 @@ public void onResult(int resultCode, @Nullable Intent result) { }); } }); - - Button btn4 = getView().findViewById(R.id.btn4); - btn4.setText(getString(R.string.nav_result_activity_to_scene)); - btn4.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().startActivity(new Intent(requireActivity(), ActivityToSceneDemoActivity.class)); - } - }); } } diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/configuration/ConfigurationDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/configuration/ConfigurationDemoScene.java similarity index 96% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/configuration/ConfigurationDemoScene.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/configuration/ConfigurationDemoScene.java index 5ec2721a..ea0bf9c6 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/configuration/ConfigurationDemoScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/configuration/ConfigurationDemoScene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.configuration; +package com.bytedance.scenedemo.activity_compatibility.configuration; import android.content.res.Configuration; import android.os.Bundle; diff --git a/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/scene_result/ActivityGetSceneResultSampleActivity.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/scene_result/ActivityGetSceneResultSampleActivity.java new file mode 100644 index 00000000..24e21b76 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/scene_result/ActivityGetSceneResultSampleActivity.java @@ -0,0 +1,114 @@ +package com.bytedance.scenedemo.activity_compatibility.scene_result; + +import android.app.Activity; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.bytedance.scene.Scene; +import com.bytedance.scene.interfaces.PushResultCallback; +import com.bytedance.scene.ui.SceneNavigator; +import com.bytedance.scenedemo.R; + +/** + * Created by JiangQi on 9/18/18. + */ +public class ActivityGetSceneResultSampleActivity extends Activity { + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LinearLayout linearLayout = new LinearLayout(this); + linearLayout.setOrientation(LinearLayout.VERTICAL); + Button button = new Button(this); +// button.setText("打开Scene"); +// button.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// new SceneNavigator(ActivityGetSceneResultSampleActivity.this, R.style.AppTheme) +// .startScene(TestScene.class, null); +// } +// }); +// linearLayout.addView(button); +// +// button = new Button(this); +// button.setText("立刻打开5个Scene"); +// button.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// for (int i = 0; i < 5; i++) { +// new SceneNavigator(ActivityGetSceneResultSampleActivity.this, R.style.AppTheme) +// .startScene(TestScene.class, null); +// } +// } +// }); +// linearLayout.addView(button); +// +// button = new Button(this); +// button.setText("间隔2秒慢慢打开5个Scene"); +// button.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// for (int i = 0; i < 5; i++) { +// new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { +// @Override +// public void run() { +// new SceneNavigator(ActivityGetSceneResultSampleActivity.this, R.style.AppTheme) +// .startScene(TestScene.class, null); +// } +// }, i * 2000); +// } +// } +// }); +// linearLayout.addView(button); + + button = new Button(this); + button.setText(R.string.main_activity_btn_activity_get_scene_result); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new SceneNavigator(ActivityGetSceneResultSampleActivity.this, R.style.AppTheme) + .startSceneForResult(TestScene2.class, null, new PushResultCallback() { + @Override + public void onResult(@Nullable Object result) { + if (result == null) { + Toast.makeText(getApplicationContext(), "null", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show(); + } + } + }); + } + }); + linearLayout.addView(button); + + setContentView(linearLayout); + } + + public static class TestScene2 extends Scene { + @NonNull + @Override + public ViewGroup onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + Button tv = new Button(requireActivity()); + tv.setText("Click to set result and finish"); + tv.setFitsSystemWindows(true); + tv.setAllCaps(false); + tv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getNavigationScene().setResult(TestScene2.this, "Result is one"); + getNavigationScene().pop(); + } + }); + FrameLayout frameLayout = new FrameLayout(requireActivity()); + frameLayout.addView(tv); + return frameLayout; + } + } +} diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardDemoScene.java similarity index 98% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardDemoScene.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardDemoScene.java index 3b0659df..25a7ad0c 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardDemoScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardDemoScene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.softkeyboard; +package com.bytedance.scenedemo.activity_compatibility.softkeyboard; import android.content.Context; import android.os.Bundle; diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardResizeScene.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardResizeScene.java similarity index 97% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardResizeScene.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardResizeScene.java index a82a0fac..21dce012 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/softkeyboard/SoftKeyboardResizeScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/softkeyboard/SoftKeyboardResizeScene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.softkeyboard; +package com.bytedance.scenedemo.activity_compatibility.softkeyboard; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/theme/ThemeDemo.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/theme/ThemeDemo.java similarity index 89% rename from demo/src/main/java/com/bytedance/scenedemo/theme/ThemeDemo.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/theme/ThemeDemo.java index 1c30908d..71627f32 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/theme/ThemeDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/theme/ThemeDemo.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.theme; +package com.bytedance.scenedemo.activity_compatibility.theme; import android.os.Bundle; import android.support.annotation.NonNull; @@ -11,27 +11,24 @@ import android.widget.TextView; import com.bytedance.scene.Scene; -import com.bytedance.scene.ui.template.SwipeBackGroupScene; +import com.bytedance.scene.ui.template.AppCompatScene; import com.bytedance.scenedemo.R; -import com.bytedance.scenedemo.utility.ColorUtil; /** * Created by JiangQi on 11/9/18. */ -public class ThemeDemo extends SwipeBackGroupScene { - +public class ThemeDemo extends AppCompatScene { @NonNull @Override - protected ViewGroup onCreateSwipeContentView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + protected ViewGroup onCreateContentView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_theme, container, false); - root.setBackgroundColor(ColorUtil.getMaterialColor(getResources(), 0)); return root; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - + setTitle(R.string.main_nav_btn_theme); TextView name = getView().findViewById(R.id.name); name.setVisibility(View.GONE); diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowColorDemo.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowColorDemo.java similarity index 96% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowColorDemo.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowColorDemo.java index 15906b7c..e3e8024f 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowColorDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowColorDemo.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.window; +package com.bytedance.scenedemo.activity_compatibility.window; import android.os.Build; import android.os.Bundle; diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowDemo.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowDemo.java similarity index 96% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowDemo.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowDemo.java index 11f338b6..d0f52e6f 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowDemo.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.window; +package com.bytedance.scenedemo.activity_compatibility.window; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowLayoutDemo.java b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowLayoutDemo.java similarity index 97% rename from demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowLayoutDemo.java rename to demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowLayoutDemo.java index 20df139b..396b7463 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/window/WindowLayoutDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/activity_compatibility/window/WindowLayoutDemo.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.navigation.window; +package com.bytedance.scenedemo.activity_compatibility.window; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/animation/SlideBackButtonDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/animation/SlideBackButtonDemoScene.java index f2493072..6f3bc404 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/animation/SlideBackButtonDemoScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/animation/SlideBackButtonDemoScene.java @@ -19,6 +19,7 @@ import com.bytedance.scene.animation.interaction.progressanimation.InteractionAnimationBuilder; import com.bytedance.scene.interfaces.PopOptions; import com.bytedance.scene.view.SlidePercentFrameLayout; +import com.bytedance.scenedemo.AnimationListDemoScene; import com.bytedance.scenedemo.MainScene; import com.bytedance.scenedemo.R; import com.bytedance.scenedemo.utility.ColorUtil; diff --git a/demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/PatternsSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/PatternsSamples.kt deleted file mode 100644 index 5bd17bc7..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/PatternsSamples.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.bytedance.scenedemo.architecture_patterns - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.* -import com.bytedance.scene.Scene -import com.bytedance.scenedemo.R -import com.bytedance.scenedemo.architecture_patterns.mvvm.ViewModelSceneSamples - - -class PatternsSamples : Scene() { - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { - val scrollView = ScrollView(activity) - - val layout = LinearLayout(activity) - layout.orientation = LinearLayout.VERTICAL - - scrollView.addView(layout) - - addSpace(layout, 12) - addTitle(layout, getString(R.string.main_title_basic)) - - addButton(layout, getString(R.string.patterns_mvp), View.OnClickListener { - Toast.makeText(requireApplicationContext(),"TODO",Toast.LENGTH_SHORT).show() - }) - - addButton(layout, getString(R.string.patterns_mvvm), View.OnClickListener { - requireNavigationScene().push(ViewModelSceneSamples::class.java) - }) - - addButton(layout, getString(R.string.patterns_mvi), View.OnClickListener { - Toast.makeText(requireApplicationContext(),"TODO",Toast.LENGTH_SHORT).show() - }) - - addButton(layout, getString(R.string.patterns_viper), View.OnClickListener { - Toast.makeText(requireApplicationContext(),"TODO",Toast.LENGTH_SHORT).show() - }) - - addSpace(layout, 100) - - return scrollView - } - - private fun addTitle(parent: LinearLayout, text: String) { - val textView = TextView(activity) - textView.textSize = 14f - textView.text = text - val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - lp.leftMargin = 30 - lp.rightMargin = 30 - lp.topMargin = 24 - lp.bottomMargin = 24 - parent.addView(textView, lp) - } - - private fun addButton(parent: LinearLayout, text: String, onClickListener: View.OnClickListener): Button { - val button = Button(activity) - button.isAllCaps = false - button.text = text - button.setOnClickListener(onClickListener) - val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 150) - lp.leftMargin = 20 - lp.rightMargin = 20 - parent.addView(button, lp) - return button - } - - private fun addSpace(parent: LinearLayout, height: Int) { - val space = Space(activity) - parent.addView(space, ViewGroup.LayoutParams.MATCH_PARENT, height) - } -} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/livedata/LiveDataScene.java b/demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/livedata/LiveDataScene.java similarity index 98% rename from demo/src/main/java/com/bytedance/scenedemo/livedata/LiveDataScene.java rename to demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/livedata/LiveDataScene.java index 28cbf6d3..59e66732 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/livedata/LiveDataScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/architecture_patterns/livedata/LiveDataScene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.livedata; +package com.bytedance.scenedemo.architecture_patterns.livedata; import android.arch.lifecycle.*; import android.graphics.Color; diff --git a/demo/src/main/java/com/bytedance/scenedemo/benchmark/BenchmarkSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/benchmark/BenchmarkSamples.kt new file mode 100644 index 00000000..c8dc1323 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/benchmark/BenchmarkSamples.kt @@ -0,0 +1,39 @@ +package com.bytedance.scenedemo.benchmark + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.Scene +import com.bytedance.scenedemo.R +import com.bytedance.scenedemo.navigation.performance.PerformanceDemo +import com.bytedance.scenedemo.utility.addButton +import com.bytedance.scenedemo.utility.addClassPathTitle +import com.bytedance.scenedemo.utility.addSpace +import com.bytedance.scenedemo.utility.addTitle + + +class BenchmarkSamples : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(activity) + + val layout = LinearLayout(activity) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, getString(R.string.main_nav_btn_compare_activity), View.OnClickListener { + requireNavigationScene().push(PerformanceDemo::class.java) + }) + + addSpace(layout, 100) + + return scrollView + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/dialog/DialogListDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/dialog/DialogListDemoScene.java deleted file mode 100644 index 1667a4be..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/dialog/DialogListDemoScene.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.bytedance.scenedemo.dialog; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import com.bytedance.scene.animation.animatorexecutor.DialogSceneAnimatorExecutor; -import com.bytedance.scene.group.GroupScene; -import com.bytedance.scene.interfaces.PushOptions; -import com.bytedance.scenedemo.R; -import com.bytedance.scenedemo.utility.ColorUtil; - -/** - * Created by JiangQi on 8/8/18. - */ -public class DialogListDemoScene extends GroupScene { - - private TextView textView; - - @NonNull - @Override - public ViewGroup onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return (ViewGroup) inflater.inflate(R.layout.basic_layout, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - getView().setBackgroundColor(ColorUtil.getMaterialColor(getResources(), 0)); - - textView = getView().findViewById(R.id.name); - - Button btn = getView().findViewById(R.id.btn); - btn.setText(R.string.part_dialog_btn_1); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(DemoDialogScene.class, null, new PushOptions.Builder() - .setTranslucent(true).setAnimation(new DialogSceneAnimatorExecutor()).build()); - } - }); - - Button btn2 = getView().findViewById(R.id.btn2); - btn2.setVisibility(View.VISIBLE); - btn2.setText(R.string.part_dialog_btn_2); - btn2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(DemoDialogWithDimScene.class, null, new PushOptions.Builder() - .setTranslucent(true).setAnimation(new DialogSceneAnimatorExecutor()).build()); - } - }); - - Button btn3 = getView().findViewById(R.id.btn3); - btn3.setVisibility(View.VISIBLE); - btn3.setText(R.string.part_dialog_btn_3); - btn3.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - } - }); - } - - @Override - public void onStart() { - super.onStart(); - textView.setText(getStateHistory()); - } - - @Override - public void onResume() { - super.onResume(); - textView.setText(getStateHistory()); - } - - @Override - public void onPause() { - super.onPause(); - textView.setText(getStateHistory()); - } - - @Override - public void onStop() { - super.onStop(); - textView.setText(getStateHistory()); - } -} diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case0Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case0Scene.java similarity index 99% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case0Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case0Scene.java index 993bb9a0..dd903d9e 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case0Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case0Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case1Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case1Scene.java similarity index 99% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case1Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case1Scene.java index cd68deab..c734b370 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case1Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case1Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.animation.Animator; import android.animation.ObjectAnimator; diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case2Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case2Scene.java similarity index 98% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case2Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case2Scene.java index 81718131..b73075fa 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case2Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case2Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.os.Bundle; import android.os.Handler; diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case3Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case3Scene.java similarity index 99% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case3Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case3Scene.java index 22e3e8c4..ef806f67 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case3Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case3Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.animation.Animator; import android.animation.ObjectAnimator; diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case4Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case4Scene.java similarity index 99% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case4Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case4Scene.java index dae51e7c..1151bd55 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case4Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case4Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/case0/Case5Scene.java b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case5Scene.java similarity index 99% rename from demo/src/main/java/com/bytedance/scenedemo/case0/Case5Scene.java rename to demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case5Scene.java index aca5bfe6..d0e4d326 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/case0/Case5Scene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/extreme_case/Case5Scene.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.case0; +package com.bytedance.scenedemo.extreme_case; import android.graphics.Color; import android.os.Bundle; diff --git a/demo/src/main/java/com/bytedance/scenedemo/async_inflate/AsyncInflateSceneDemo.java b/demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/AsyncInflateSceneDemo.java similarity index 96% rename from demo/src/main/java/com/bytedance/scenedemo/async_inflate/AsyncInflateSceneDemo.java rename to demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/AsyncInflateSceneDemo.java index 84c946fb..d097f4da 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/async_inflate/AsyncInflateSceneDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/AsyncInflateSceneDemo.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.async_inflate; +package com.bytedance.scenedemo.group.async_inflate; import android.graphics.drawable.AnimatedVectorDrawable; import android.os.Bundle; diff --git a/demo/src/main/java/com/bytedance/scenedemo/async_inflate/TestAsyncView.java b/demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/TestAsyncView.java similarity index 94% rename from demo/src/main/java/com/bytedance/scenedemo/async_inflate/TestAsyncView.java rename to demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/TestAsyncView.java index 6aa263d0..f46a2843 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/async_inflate/TestAsyncView.java +++ b/demo/src/main/java/com/bytedance/scenedemo/group/async_inflate/TestAsyncView.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.async_inflate; +package com.bytedance.scenedemo.group.async_inflate; import android.content.Context; import android.support.annotation.Nullable; diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/pageblock/PageBlockGroupScene.java b/demo/src/main/java/com/bytedance/scenedemo/group/basic_usage/GroupSceneBasicUsageSample.java similarity index 72% rename from demo/src/main/java/com/bytedance/scenedemo/group/pageblock/PageBlockGroupScene.java rename to demo/src/main/java/com/bytedance/scenedemo/group/basic_usage/GroupSceneBasicUsageSample.java index eb8a3800..fb5978c9 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/group/pageblock/PageBlockGroupScene.java +++ b/demo/src/main/java/com/bytedance/scenedemo/group/basic_usage/GroupSceneBasicUsageSample.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.group.pageblock; +package com.bytedance.scenedemo.group.basic_usage; import android.os.Bundle; import android.support.annotation.NonNull; @@ -12,47 +12,48 @@ import com.bytedance.scene.Scene; import com.bytedance.scene.group.Creator; -import com.bytedance.scene.group.GroupScene; +import com.bytedance.scene.ui.template.AppCompatScene; import com.bytedance.scenedemo.R; import com.bytedance.scenedemo.utility.ColorUtil; /** * Created by JiangQi on 8/7/18. */ -public class PageBlockGroupScene extends GroupScene { +public class GroupSceneBasicUsageSample extends AppCompatScene { @NonNull @Override - public ViewGroup onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public ViewGroup onCreateContentView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return (ViewGroup) inflater.inflate(R.layout.group_scene_page_block, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + setTitle(R.string.main_part_btn_child_scene); - PageBlockScene scene = createOrReuse("0", new Creator() { + BasicUsageScene scene = createOrReuse("0", new Creator() { @Override - public PageBlockScene call() { - return PageBlockScene.newInstance(0); + public BasicUsageScene call() { + return BasicUsageScene.newInstance(0); } }); - PageBlockScene scene1 = createOrReuse("1", new Creator() { + BasicUsageScene scene1 = createOrReuse("1", new Creator() { @Override - public PageBlockScene call() { - return PageBlockScene.newInstance(1); + public BasicUsageScene call() { + return BasicUsageScene.newInstance(1); } }); - PageBlockScene scene2 = createOrReuse("2", new Creator() { + BasicUsageScene scene2 = createOrReuse("2", new Creator() { @Override - public PageBlockScene call() { - return PageBlockScene.newInstance(2); + public BasicUsageScene call() { + return BasicUsageScene.newInstance(2); } }); - PageBlockScene scene3 = createOrReuse("3", new Creator() { + BasicUsageScene scene3 = createOrReuse("3", new Creator() { @Override - public PageBlockScene call() { - return PageBlockScene.newInstance(3); + public BasicUsageScene call() { + return BasicUsageScene.newInstance(3); } }); @@ -65,7 +66,7 @@ public PageBlockScene call() { if (!isAdded(scene3)) add(R.id.block_3, scene3, "3"); - final PageBlockScene finalScene = scene; + final BasicUsageScene finalScene = scene; findViewById(R.id.btn_0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -100,10 +101,10 @@ public void onClick(View v) { }); } - public static class PageBlockScene extends Scene { + public static class BasicUsageScene extends Scene { - public static PageBlockScene newInstance(int index) { - PageBlockScene scene = new PageBlockScene(); + public static BasicUsageScene newInstance(int index) { + BasicUsageScene scene = new BasicUsageScene(); Bundle bundle = new Bundle(); bundle.putInt("index", index); scene.setArguments(bundle); diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/inherited/InheritedDemo.java b/demo/src/main/java/com/bytedance/scenedemo/group/inherited/InheritedDemo.java index c64297d9..e753f9f4 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/group/inherited/InheritedDemo.java +++ b/demo/src/main/java/com/bytedance/scenedemo/group/inherited/InheritedDemo.java @@ -72,36 +72,36 @@ public Child0Scene call() { if (!isAdded(scene3)) add(R.id.block_3, scene3, "3"); } -} -class Child0Scene extends Scene { + public static class Child0Scene extends Scene { - public static Child0Scene newInstance(int index) { - Child0Scene scene = new Child0Scene(); - Bundle bundle = new Bundle(); - bundle.putInt("index", index); - scene.setArguments(bundle); - return scene; - } + public static Child0Scene newInstance(int index) { + Child0Scene scene = new Child0Scene(); + Bundle bundle = new Bundle(); + bundle.putInt("index", index); + scene.setArguments(bundle); + return scene; + } - @NonNull - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return new View(getActivity()); - } + @NonNull + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return new View(getActivity()); + } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - final int index = getArguments().getInt("index", 0); - getView().setBackgroundColor(ColorUtil.getMaterialColor(getResources(), index)); + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + final int index = getArguments().getInt("index", 0); + getView().setBackgroundColor(ColorUtil.getMaterialColor(getResources(), index)); - getView().setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - InheritedDemo inheritedScene = getScope().getService(InheritedDemo.class); - inheritedScene.summary.setText("Child Scene" + index); - } - }); + getView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + InheritedDemo inheritedScene = getScope().getService(InheritedDemo.class); + inheritedScene.summary.setText("Child Scene" + index); + } + }); + } } } \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/placeholder/PlaceHolderViewSample.kt b/demo/src/main/java/com/bytedance/scenedemo/group/placeholder/PlaceHolderViewSample.kt new file mode 100644 index 00000000..ccdcf132 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/group/placeholder/PlaceHolderViewSample.kt @@ -0,0 +1,14 @@ +package com.bytedance.scenedemo.group.placeholder + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.FrameLayout +import com.bytedance.scene.group.GroupScene + + +class PlaceHolderViewSample : GroupScene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): ViewGroup { + return FrameLayout(requireSceneContext()) + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/FragmentBindingDemoActivity.java b/demo/src/main/java/com/bytedance/scenedemo/migrate/FragmentBindingDemoActivity.java similarity index 98% rename from demo/src/main/java/com/bytedance/scenedemo/group/fragment/FragmentBindingDemoActivity.java rename to demo/src/main/java/com/bytedance/scenedemo/migrate/FragmentBindingDemoActivity.java index 78e9f92f..117e09a7 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/FragmentBindingDemoActivity.java +++ b/demo/src/main/java/com/bytedance/scenedemo/migrate/FragmentBindingDemoActivity.java @@ -1,4 +1,4 @@ -package com.bytedance.scenedemo.group.fragment; +package com.bytedance.scenedemo.migrate; import android.os.Bundle; import android.support.annotation.NonNull; diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneDelegateToViewView.java b/demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneDelegateToViewView.java similarity index 97% rename from demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneDelegateToViewView.java rename to demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneDelegateToViewView.java index 2e8e9b96..28c51336 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneDelegateToViewView.java +++ b/demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneDelegateToViewView.java @@ -1,11 +1,9 @@ -package com.bytedance.scenedemo.group.fragment; +package com.bytedance.scenedemo.migrate; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; -import android.content.Intent; import android.graphics.Color; -import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; diff --git a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneToViewActivity.java b/demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneToViewActivity.java similarity index 93% rename from demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneToViewActivity.java rename to demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneToViewActivity.java index b7c4bef4..2c27ba04 100644 --- a/demo/src/main/java/com/bytedance/scenedemo/group/fragment/TestSceneToViewActivity.java +++ b/demo/src/main/java/com/bytedance/scenedemo/migrate/TestSceneToViewActivity.java @@ -1,9 +1,7 @@ -package com.bytedance.scenedemo.group.fragment; +package com.bytedance.scenedemo.migrate; import android.app.Activity; -import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.bytedance.scene.navigation.NavigationScene; diff --git a/demo/src/main/java/com/bytedance/scenedemo/migrate/migrate_from_classic_activity_fragment/MigrateFromClassicActivityFragmentSamples.kt b/demo/src/main/java/com/bytedance/scenedemo/migrate/migrate_from_classic_activity_fragment/MigrateFromClassicActivityFragmentSamples.kt new file mode 100644 index 00000000..15b7a369 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/migrate/migrate_from_classic_activity_fragment/MigrateFromClassicActivityFragmentSamples.kt @@ -0,0 +1,128 @@ +package com.bytedance.scenedemo.migrate.migrate_from_classic_activity_fragment + +import android.graphics.Color +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.app.AppCompatActivity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import com.bytedance.scene.NavigationSceneUtility +import com.bytedance.scene.Scene +import com.bytedance.scene.SceneDelegate +import com.bytedance.scene.interfaces.ChildSceneLifecycleAdapterCallbacks +import com.bytedance.scene.navigation.NavigationScene +import com.bytedance.scene.ui.SceneNavigationContainer +import com.bytedance.scenedemo.R + +/** + * This sample show how to use Scene with classic Android app develop technology (Activity+Fragment) together. + * Once all fragments are converted to 'SceneProxyFragment', you can remove all Fragments, then use Scene directly. + */ +//TODO in developing +class MigrateFromClassicAndroidActivitySamplesActivity : AppCompatActivity(), SceneNavigationContainer { + override fun getThemeId(): Int { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun isVisible(): Boolean { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun getNavigationScene(): NavigationScene? = this.mSceneActivityDelegate?.navigationScene + + + private lateinit var mRootFragment: Fragment + private lateinit var mSceneActivityDelegate: SceneDelegate + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(com.bytedance.scenedemo.R.layout.layout_migrate_from_classic_activity_fragment) + + mRootFragment = ClassicFragment() + supportFragmentManager.beginTransaction().add(R.id.classic_fragment_container, mRootFragment).commitNowAllowingStateLoss() + + mSceneActivityDelegate = NavigationSceneUtility.setupWithActivity(this, EmptyHolderScene::class.java) + .toView(com.bytedance.scenedemo.R.id.scene_container).drawWindowBackground(false) + .fixSceneWindowBackgroundEnabled(true) + .sceneBackground(android.R.color.white) + .supportRestore(false) + .build() + + mSceneActivityDelegate.navigationScene?.registerChildSceneLifecycleCallbacks(object : ChildSceneLifecycleAdapterCallbacks() { + var count = 0 + override fun onSceneActivityCreated(scene: Scene, savedInstanceState: Bundle?) { + super.onSceneActivityCreated(scene, savedInstanceState) + count++ + if (count > 1 && mRootFragment.userVisibleHint) { + mRootFragment.userVisibleHint = false + } + } + + override fun onSceneViewDestroyed(scene: Scene) { + super.onSceneViewDestroyed(scene) + count-- + if (count == 1 && !mRootFragment.userVisibleHint) { + mRootFragment.userVisibleHint = true + } + } + }, false) + } + + override fun onBackPressed() { + val sceneDelegate = this.mSceneActivityDelegate + if (sceneDelegate.onBackPressed()) { + //empty + } else { + super.onBackPressed() + } + } + + class EmptyHolderScene : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + return View(requireSceneContext()) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + getView().setBackgroundColor(Color.TRANSPARENT) + } + } + + //This fragment has business logic + class ClassicFragment : Fragment() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val textView = TextView(requireActivity()) + textView.text = "ClassicFragment" + return textView + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + } + + private fun gotoDetail() { + (requireActivity() as MigrateFromClassicAndroidActivitySamplesActivity).navigationScene?.push(DetailScene::class.java) + } + } + + //This fragment don't have any business logic, its business logic is refactored to another Scene + class SceneProxyFragment : Fragment() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + } + } + + class DetailScene : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val textView = TextView(requireSceneContext()) + textView.text = "DetailScene" + return textView + } + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/multi_stack/MultiStackDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/multi_stack/MultiStackDemoScene.java deleted file mode 100644 index ebaea555..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/multi_stack/MultiStackDemoScene.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.bytedance.scenedemo.multi_stack; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import com.bytedance.scene.animation.animatorexecutor.HorizontalTransitionAnimatorExecutor; -import com.bytedance.scene.group.GroupScene; -import com.bytedance.scene.interfaces.PushOptions; -import com.bytedance.scene.navigation.NavigationScene; -import com.bytedance.scene.navigation.NavigationSceneOptions; -import com.bytedance.scenedemo.MainScene; -import com.bytedance.scenedemo.R; -import com.bytedance.scenedemo.utility.ColorUtil; - -/** - * Created by JiangQi on 9/11/18. - */ -public class MultiStackDemoScene extends GroupScene { - - @NonNull - @Override - public ViewGroup onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return (ViewGroup) inflater.inflate(R.layout.basic_layout, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - getView().setBackgroundColor(ColorUtil.getMaterialColor(getResources(), 0)); - - TextView name = getView().findViewById(R.id.name); - name.setVisibility(View.GONE); - - Button btn = getView().findViewById(R.id.btn); - btn.setText(R.string.nav_multi_stack_btn_1); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(NavigationScene.class, new NavigationSceneOptions(MainScene.class, null).toBundle()); - } - }); - - Button btn2 = getView().findViewById(R.id.btn2); - btn2.setVisibility(View.VISIBLE); - btn2.setText(R.string.nav_multi_stack_btn_2); - btn2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(NavigationScene.class, new NavigationSceneOptions(MainScene.class, null).toBundle() - , new PushOptions.Builder().setAnimation(new HorizontalTransitionAnimatorExecutor()).build()); - } - }); - - Button btn3 = getView().findViewById(R.id.btn3); - btn3.setVisibility(View.VISIBLE); - btn3.setText(R.string.nav_multi_stack_btn_3); - btn3.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().push(MultiStackTabGroupScene.class); - } - }); - } -} diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/ActivityToSceneDemoActivity.java b/demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/ActivityToSceneDemoActivity.java deleted file mode 100644 index 6f2624f7..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/forresult/ActivityToSceneDemoActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.bytedance.scenedemo.navigation.forresult; - -import android.app.Activity; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import com.bytedance.scene.interfaces.PushResultCallback; -import com.bytedance.scene.ui.SceneNavigator; -import com.bytedance.scene.ui.template.SwipeBackGroupScene; -import com.bytedance.scenedemo.R; - -/** - * Created by JiangQi on 9/18/18. - */ -public class ActivityToSceneDemoActivity extends Activity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout linearLayout = new LinearLayout(this); - linearLayout.setOrientation(LinearLayout.VERTICAL); - Button button = new Button(this); - button.setText("打开Scene"); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new SceneNavigator(ActivityToSceneDemoActivity.this, R.style.AppTheme) - .startScene(TestScene.class, null); - } - }); - linearLayout.addView(button); - - button = new Button(this); - button.setText("立刻打开5个Scene"); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - for (int i = 0; i < 5; i++) { - new SceneNavigator(ActivityToSceneDemoActivity.this, R.style.AppTheme) - .startScene(TestScene.class, null); - } - } - }); - linearLayout.addView(button); - - button = new Button(this); - button.setText("间隔2秒慢慢打开5个Scene"); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - for (int i = 0; i < 5; i++) { - new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { - @Override - public void run() { - new SceneNavigator(ActivityToSceneDemoActivity.this, R.style.AppTheme) - .startScene(TestScene.class, null); - } - }, i * 2000); - } - } - }); - linearLayout.addView(button); - - button = new Button(this); - button.setText("打开Scene拿结果"); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new SceneNavigator(ActivityToSceneDemoActivity.this, R.style.AppTheme) - .startSceneForResult(TestScene2.class, null, new PushResultCallback() { - @Override - public void onResult(@Nullable Object result) { - if (result == null) { - Toast.makeText(getApplicationContext(), "null", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show(); - } - } - }); - } - }); - linearLayout.addView(button); - - setContentView(linearLayout); - } - - public static class TestScene extends SwipeBackGroupScene { - @NonNull - @Override - protected ViewGroup onCreateSwipeContentView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - TextView tv = new TextView(requireActivity()); - tv.setText(getNavigationScene().getStackHistory()); - tv.setFitsSystemWindows(true); - - FrameLayout frameLayout = new FrameLayout(requireActivity()); - frameLayout.addView(tv); - return frameLayout; - } - } - - public static class TestScene2 extends SwipeBackGroupScene { - @NonNull - @Override - protected ViewGroup onCreateSwipeContentView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - Button tv = new Button(requireActivity()); - tv.setText("点击返回结果"); - tv.setFitsSystemWindows(true); - tv.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getNavigationScene().setResult(TestScene2.this, "结果是1"); - getNavigationScene().pop(); - } - }); - FrameLayout frameLayout = new FrameLayout(requireActivity()); - frameLayout.addView(tv); - return frameLayout; - } - } -} diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopBasicUsageDemoScene.kt b/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopBasicUsageDemoScene.kt new file mode 100644 index 00000000..f2f5ee5d --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopBasicUsageDemoScene.kt @@ -0,0 +1,43 @@ +package com.bytedance.scenedemo.navigation.push_pop + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import com.bytedance.scene.Scene +import com.bytedance.scenedemo.R +import com.bytedance.scenedemo.utility.* + +/** + * Created by JiangQi on 7/30/18. + */ +class PushPopBasicUsageDemoScene : Scene() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { + val scrollView = ScrollView(requireSceneContext()) + scrollView.fitsSystemWindows = true + + val layout = LinearLayout(requireSceneContext()) + layout.orientation = LinearLayout.VERTICAL + + scrollView.addView(layout) + + val argument = arguments + val value = argument?.getInt("1", 0) ?: 0 + scrollView.setBackgroundColor(ColorUtil.getMaterialColor(activity!!.resources, value)) + + addClassPathTitle(layout) + addSpace(layout, 12) + addTitle(layout, getString(R.string.main_title_basic)) + + addButton(layout, value.toString(), View.OnClickListener { + val bundle = Bundle() + bundle.putInt("1", value + 1) + requireNavigationScene().push(PushPopBasicUsageDemoScene::class.java, bundle) + }) + addSpace(layout, 100) + + return scrollView + } +} diff --git a/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopDemoScene.java b/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopDemoScene.java deleted file mode 100644 index 6805306f..00000000 --- a/demo/src/main/java/com/bytedance/scenedemo/navigation/push_pop/PushPopDemoScene.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.bytedance.scenedemo.navigation.push_pop; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import com.bytedance.scene.Scene; -import com.bytedance.scene.navigation.OnBackPressedListener; -import com.bytedance.scenedemo.R; -import com.bytedance.scenedemo.utility.ColorUtil; - -/** - * Created by JiangQi on 7/30/18. - */ -public class PushPopDemoScene extends Scene { - - @NonNull - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.basic_layout, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - Bundle argument = getArguments(); - int value = argument != null ? argument.getInt("1", 0) : 0; - if (getActivity() != null) { - getView().setBackgroundColor(ColorUtil.getMaterialColor(getActivity().getResources(), value)); - } - - TextView name = getView().findViewById(R.id.name); - name.setText(getNavigationScene().getStackHistory()); - - Button btn = getView().findViewById(R.id.btn); - btn.setText(String.valueOf(value)); - final int finalValue = value; - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Bundle bundle = new Bundle(); - bundle.putInt("1", finalValue + 1); - getNavigationScene().push(PushPopDemoScene.class, bundle); - } - }); - - getNavigationScene().addOnBackPressedListener(this, new OnBackPressedListener() { - @Override - public boolean onBackPressed() { - return false; - } - }); - } -} diff --git a/demo/src/main/java/com/bytedance/scenedemo/utility/Utility.kt b/demo/src/main/java/com/bytedance/scenedemo/utility/Utility.kt new file mode 100644 index 00000000..e52950ad --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/utility/Utility.kt @@ -0,0 +1,52 @@ +package com.bytedance.scenedemo.utility + +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.LinearLayout +import android.widget.Space +import android.widget.TextView +import com.bytedance.scene.Scene +import com.bytedance.scenedemo.view.ClassPathInfoTextView + + +fun Scene.addTitle(parent: LinearLayout, text: String) { + val textView = TextView(requireSceneContext()) + textView.textSize = 14f + textView.text = text + val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + lp.leftMargin = 30 + lp.rightMargin = 30 + lp.topMargin = 24 + lp.bottomMargin = 24 + parent.addView(textView, lp) +} + +fun Scene.addClassPathTitle(parent: LinearLayout) { + val textView = ClassPathInfoTextView(requireSceneContext()) + textView.textSize = 14f + val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + lp.leftMargin = 30 + lp.rightMargin = 30 + lp.topMargin = 24 + lp.bottomMargin = 24 + parent.addView(textView, lp) +} + +fun Scene.addButton(parent: LinearLayout, text: String, onClickListener: View.OnClickListener): Button { + val button = Button(requireSceneContext()) + button.isAllCaps = false + button.text = text + button.setOnClickListener(onClickListener) + val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + lp.leftMargin = 20 + lp.rightMargin = 20 + button.minHeight = 150 + parent.addView(button, lp) + return button +} + +fun Scene.addSpace(parent: LinearLayout, height: Int) { + val space = Space(requireSceneContext()) + parent.addView(space, ViewGroup.LayoutParams.MATCH_PARENT, height) +} \ No newline at end of file diff --git a/demo/src/main/java/com/bytedance/scenedemo/view/ClassPathInfoTextView.kt b/demo/src/main/java/com/bytedance/scenedemo/view/ClassPathInfoTextView.kt new file mode 100644 index 00000000..817ac996 --- /dev/null +++ b/demo/src/main/java/com/bytedance/scenedemo/view/ClassPathInfoTextView.kt @@ -0,0 +1,16 @@ +package com.bytedance.scenedemo.view + +import android.content.Context +import android.util.AttributeSet +import android.widget.TextView +import com.bytedance.scene.ktx.getScene + + +class ClassPathInfoTextView @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 +) : TextView(context, attrs, defStyleAttr) { + override fun onAttachedToWindow() { + super.onAttachedToWindow() + this.text = getScene().javaClass.name + } +} \ No newline at end of file diff --git a/demo/src/main/res/layout/basic_layout.xml b/demo/src/main/res/layout/basic_layout.xml index 44da8eb5..0695dd00 100644 --- a/demo/src/main/res/layout/basic_layout.xml +++ b/demo/src/main/res/layout/basic_layout.xml @@ -1,19 +1,23 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:orientation="vertical"> + + + android:layout_marginBottom="12dp" /> + tools:visibility="visible" />