From 578ed5d1f1c5152f33e7a968ef1e08a6919a5e80 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 12 Aug 2021 18:11:17 +0800 Subject: [PATCH 01/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E9=A1=B5=20Added=20=E6=B7=BB=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E7=94=A8AppBar=20Added=20=E8=AE=BE=E7=BD=AE=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 14 ++ .../main/java/com/halo/assistant/HaloApp.java | 28 +++ flutter_module/.gitignore | 48 +++++ flutter_module/.metadata | 10 + flutter_module/README.md | 11 ++ .../lib/common/widgets/halo_app_bar.dart | 105 +++++++++++ flutter_module/lib/main.dart | 31 ++++ flutter_module/lib/pages/feedback_page.dart | 17 ++ flutter_module/lib/route.dart | 23 +++ flutter_module/pubspec.lock | 172 ++++++++++++++++++ flutter_module/pubspec.yaml | 94 ++++++++++ flutter_module/settings.gradle | 3 + flutter_module/test/widget_test.dart | 30 +++ settings.gradle | 5 + 15 files changed, 595 insertions(+) create mode 100644 flutter_module/.gitignore create mode 100644 flutter_module/.metadata create mode 100644 flutter_module/README.md create mode 100644 flutter_module/lib/common/widgets/halo_app_bar.dart create mode 100644 flutter_module/lib/main.dart create mode 100644 flutter_module/lib/pages/feedback_page.dart create mode 100644 flutter_module/lib/route.dart create mode 100644 flutter_module/pubspec.lock create mode 100644 flutter_module/pubspec.yaml create mode 100644 flutter_module/settings.gradle create mode 100644 flutter_module/test/widget_test.dart diff --git a/app/build.gradle b/app/build.gradle index 991d51234d..ee3b9f0c96 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -352,6 +352,10 @@ dependencies { // implementation project(':libraries:WechatShare') // implementation project(':libraries:im') implementation project(':libraries:Matisse') + + // Flutter模块 + implementation project(':flutter') + implementation project(':flutter_boost') } File propFile = file('sign.properties') if (propFile.exists()) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a914c8307..a43e3271b2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -845,6 +845,20 @@ android:authorities="${applicationId}.TTMultiProvider" android:exported="false" />--> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index f1921491d1..32aa1b99c7 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -45,6 +45,10 @@ import com.gh.gamecenter.receiver.NetworkStateReceiver; import com.gh.gamecenter.user.UserRepository; import com.github.piasy.biv.BigImageViewer; import com.github.piasy.biv.loader.fresco.FrescoImageLoader; +import com.idlefish.flutterboost.FlutterBoost; +import com.idlefish.flutterboost.FlutterBoostDelegate; +import com.idlefish.flutterboost.FlutterBoostRouteOptions; +import com.idlefish.flutterboost.containers.FlutterBoostActivity; import com.leon.channel.helper.ChannelReaderUtil; import com.lightgame.utils.Utils; import com.llew.huawei.verifier.LoadedApkHuaWei; @@ -54,6 +58,7 @@ import com.squareup.picasso.Picasso; import java.lang.reflect.Method; +import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.reactivex.plugins.RxJavaPlugins; import tv.danmaku.ijk.media.exo2.Exo2PlayerManager; import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager; @@ -226,6 +231,7 @@ public class HaloApp extends MultiDexApplication { initConnectivityChangesReceiver(); initTimeConsumingAction(); + initFlutterBoost(); // 注册回调以用于做各种统计 ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner()); @@ -327,6 +333,28 @@ public class HaloApp extends MultiDexApplication { }); } + private void initFlutterBoost() { + FlutterBoost.instance().setup(this, new FlutterBoostDelegate() { + @Override + public void pushNativeRoute(FlutterBoostRouteOptions options) { + + } + + @Override + public void pushFlutterRoute(FlutterBoostRouteOptions options) { + // 获取路由信息,并开启一个FlutterBoostActivity作为Flutter的容器 + Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class) + .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) + .destroyEngineWithActivity(false) + .uniqueId(options.uniqueId()) + .url(options.pageName()) + .urlParams(options.arguments()) + .build(FlutterBoost.instance().currentActivity()); + FlutterBoost.instance().currentActivity().startActivity(intent); + } + }, null); + } + public boolean isPostInitialized() { return mIsPostInitialized; } diff --git a/flutter_module/.gitignore b/flutter_module/.gitignore new file mode 100644 index 0000000000..ff612b3be4 --- /dev/null +++ b/flutter_module/.gitignore @@ -0,0 +1,48 @@ +.DS_Store +.dart_tool/ + +.packages +.pub/ + +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +*.swp +profile + +DerivedData/ + +.generated/ + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +build/ +.android/ +.ios/ +.flutter-plugins +.flutter-plugins-dependencies + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json diff --git a/flutter_module/.metadata b/flutter_module/.metadata new file mode 100644 index 0000000000..df0e1310c9 --- /dev/null +++ b/flutter_module/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 02c026b03cd31dd3f867e5faeb7e104cce174c5f + channel: unknown + +project_type: module diff --git a/flutter_module/README.md b/flutter_module/README.md new file mode 100644 index 0000000000..4cd7e0dcc8 --- /dev/null +++ b/flutter_module/README.md @@ -0,0 +1,11 @@ +# flutter_module + +The Assistant Flutter moudle. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](https://flutter.dev/). + +For instructions integrating Flutter modules to your existing applications, +see the [add-to-app documentation](https://flutter.dev/docs/development/add-to-app). diff --git a/flutter_module/lib/common/widgets/halo_app_bar.dart b/flutter_module/lib/common/widgets/halo_app_bar.dart new file mode 100644 index 0000000000..20d9fd29f1 --- /dev/null +++ b/flutter_module/lib/common/widgets/halo_app_bar.dart @@ -0,0 +1,105 @@ + +import 'package:flutter/cupertino.dart' hide ImageProvider; +import 'package:flutter/material.dart' hide ImageProvider; +import 'package:flutter_glide/flutter_glide.dart'; + +class HaloAppBar extends StatelessWidget implements PreferredSizeWidget { + static const double APP_BAR_SIZE = 48; + static const String DEFAULT_NAVIGATION_ICON = "R.drawable.ic_bar_back"; + + // 标题栏 + final String title;// 标题文案 + final double? titleSize;// 标题字体大小 + final Color? titleColor;// 标题字体颜色 + final TextStyle? titleStyle;// 标题字体样式 + final Widget? titleWidget;// 自定义标题控件 + + // 导航按钮 + final ImageProvider? navigationIcon;// 导航按钮图标 + final double? navigationMarginStart;// 导航按钮左间隔 + final double? navigationIconWidth;// 导航按钮宽度 + final double? navigationIconHeight;// 导航按钮高度 + final Widget? navigationWidget;// 自定导航按钮控件 + final VoidCallback? onNavigationPressed;// 导航按钮点击事件 + + // 菜单栏 + final Widget? menuWidget; // 自定义菜单控件 + final double? menuMarginEnd; // 菜单右间隔 + final VoidCallback? onMenuPressed;// 菜单点击事件 + + + + const HaloAppBar({ + Key? key, + required this.title, + this.titleSize, + this.titleColor, + this.titleStyle, + this.titleWidget, + this.navigationWidget, + this.navigationIcon, + this.onNavigationPressed, + this.navigationIconWidth, + this.navigationIconHeight, + this.navigationMarginStart, + this.menuWidget, + this.menuMarginEnd, + this.onMenuPressed, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + // 导航栏 + Widget navigationWidget = Positioned( + left: navigationMarginStart??15, + child: this.navigationWidget ?? + Glide( + navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), + width: navigationIconWidth ?? 24, + height: navigationIconHeight ?? 24 + ) + ); + if (onNavigationPressed != null) + navigationWidget = GestureDetector( + onTap: onNavigationPressed, + child: navigationWidget + ); + + // 标题栏 + Widget titleWidget = this.titleWidget ?? Text( + this.title, + style: this.titleStyle??TextStyle( + color: this.titleColor??Colors.black, + fontSize: this.titleSize??17, + fontWeight: FontWeight.w500 + ), + ); + + // 菜单栏 + Widget menuWidget = Container(); + if (this.menuWidget != null) { + menuWidget = Positioned( + right: this.menuMarginEnd??15, + child: this.onMenuPressed != null ? GestureDetector( + onTap: this.onMenuPressed, + child: this.menuWidget + ) : this.menuWidget! + ); + } + + return SafeArea( + child: Stack( + alignment: Alignment.center, + children: [ + navigationWidget, + titleWidget, + menuWidget + ], + ) + ); + } + + @override + Size get preferredSize => Size.fromHeight(APP_BAR_SIZE); + +} \ No newline at end of file diff --git a/flutter_module/lib/main.dart b/flutter_module/lib/main.dart new file mode 100644 index 0000000000..db9565c933 --- /dev/null +++ b/flutter_module/lib/main.dart @@ -0,0 +1,31 @@ +//@dart=2.9 +import 'package:flutter/material.dart'; +import 'package:flutter_boost/boost_flutter_binding.dart'; +import 'package:flutter_boost/flutter_boost.dart'; +import 'package:flutter_module/route.dart'; + +void main() { + HaloFlutterBinding(); + runApp(HaloApp()); +} + +class HaloApp extends StatefulWidget { + @override + State createState() => HaloAppState(); +} + +class HaloAppState extends State { + + Route _buildRoute(RouteSettings settings, String uniqueId) { + FlutterBoostRouteFactory func = routes[settings.name]; + return func?.call(settings, uniqueId); + } + + @override + Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); +} + +//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding +//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 +//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 +class HaloFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} diff --git a/flutter_module/lib/pages/feedback_page.dart b/flutter_module/lib/pages/feedback_page.dart new file mode 100644 index 0000000000..5aee440e72 --- /dev/null +++ b/flutter_module/lib/pages/feedback_page.dart @@ -0,0 +1,17 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_module/common/widgets/halo_app_bar.dart'; + +class FeedbackPage extends StatelessWidget { + + @override + Widget build(BuildContext context) => Scaffold( + appBar: const HaloAppBar(title: '意见与反馈'), + body: SafeArea( + child: Center( + child: Text("意见反馈") + ), + ) + ); + +} \ No newline at end of file diff --git a/flutter_module/lib/route.dart b/flutter_module/lib/route.dart new file mode 100644 index 0000000000..572df00bc8 --- /dev/null +++ b/flutter_module/lib/route.dart @@ -0,0 +1,23 @@ +//@dart=2.9 +import 'package:flutter/cupertino.dart'; +import 'package:flutter_boost/flutter_boost.dart'; +import 'package:flutter_module/pages/feedback_page.dart'; + +const String FEED_BACK = "feedback"; + +Map get routes => { + "/": (settings, uniqueId) { + return PageRouteBuilder( + settings: settings, + pageBuilder: (_, __, ___) { + return FeedbackPage(); + }); + }, + FEED_BACK: (settings, uniqueId) { + return PageRouteBuilder( + settings: settings, + pageBuilder: (_, __, ___) { + return FeedbackPage(); + }); + } +}; \ No newline at end of file diff --git a/flutter_module/pubspec.lock b/flutter_module/pubspec.lock new file mode 100644 index 0000000000..9c4f097078 --- /dev/null +++ b/flutter_module/pubspec.lock @@ -0,0 +1,172 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.6.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_boost: + dependency: "direct main" + description: + path: "." + ref: "v3.0-preview.9" + resolved-ref: fe438a61ffd6df6af51226b5a48bb9f533b7a1bc + url: "https://github.com/alibaba/flutter_boost.git" + source: git + version: "3.0.0" + flutter_glide: + dependency: "direct main" + description: + path: "." + ref: HEAD + resolved-ref: "89607c04bb76cadb28f18bc589ca99baa82dddd8" + url: "https://github.com/axen1314/flutter_glide.git" + source: git + version: "0.0.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.10" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.3.0" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" +sdks: + dart: ">=2.12.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/flutter_module/pubspec.yaml b/flutter_module/pubspec.yaml new file mode 100644 index 0000000000..7142d4a034 --- /dev/null +++ b/flutter_module/pubspec.yaml @@ -0,0 +1,94 @@ +name: flutter_module +description: The Assistant Flutter moudle. + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# +# This version is used _only_ for the Runner app, which is used if you just do +# a `flutter run` or a `flutter make-host-app-editable`. It has no impact +# on any other native host app that you embed your Flutter project into. +version: 1.0.0+1 +publish_to: none + +environment: + sdk: ">=2.12.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + flutter_boost: + git: + url: 'https://github.com/alibaba/flutter_boost.git' + ref: 'v3.0-preview.9' + flutter_glide: + git: + url: 'https://github.com/axen1314/flutter_glide.git' + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +flutter: + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add Flutter specific assets to your application, add an assets section, + # like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add Flutter specific custom fonts to your application, add a fonts + # section here, in this "flutter" section. Each entry in this list should + # have a "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages + + + # This section identifies your Flutter project as a module meant for + # embedding in a native host app. These identifiers should _not_ ordinarily + # be changed after generation - they are used to ensure that the tooling can + # maintain consistency when adding or modifying assets and plugins. + # They also do not have any bearing on your native host application's + # identifiers, which may be completely independent or the same as these. + module: + androidX: true + androidPackage: com.halo.assistant.flutter_module + iosBundleIdentifier: com.halo.assistant.flutterModule diff --git a/flutter_module/settings.gradle b/flutter_module/settings.gradle new file mode 100644 index 0000000000..c77f6171db --- /dev/null +++ b/flutter_module/settings.gradle @@ -0,0 +1,3 @@ + +// Generated file. Do not edit. +include ':.android' diff --git a/flutter_module/test/widget_test.dart b/flutter_module/test/widget_test.dart new file mode 100644 index 0000000000..57e665824c --- /dev/null +++ b/flutter_module/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:flutter_module/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(HaloApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/settings.gradle b/settings.gradle index 1b339eb9e9..510a153f23 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,9 @@ include ':app' +setBinding(new Binding([gradle: this])) +evaluate(new File( + settingsDir, + 'flutter_module/.android/include_flutter.groovy' +)) //include ':libraries:im' include ':libraries:LGLibrary' //include ':libraries:MTA' From 456822f56fa91bd2ae5e36bb8de21f169a45f442 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 13 Aug 2021 18:23:50 +0800 Subject: [PATCH 02/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E7=94=A8Tabbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flutter_module/lib/common/colors.dart | 8 +++ .../{halo_app_bar.dart => halo_appbar.dart} | 50 ++++++++------ .../lib/common/widgets/halo_tabbar.dart | 58 ++++++++++++++++ .../lib/pages/feedback/feedback_page.dart | 69 +++++++++++++++++++ .../lib/pages/feedback/help_fragment.dart | 13 ++++ .../lib/pages/feedback/suggest_fragment.dart | 12 ++++ flutter_module/lib/pages/feedback_page.dart | 17 ----- flutter_module/lib/route.dart | 2 +- flutter_module/pubspec.lock | 6 +- flutter_module/pubspec.yaml | 1 + flutter_module/test/widget_test.dart | 6 ++ 11 files changed, 200 insertions(+), 42 deletions(-) create mode 100644 flutter_module/lib/common/colors.dart rename flutter_module/lib/common/widgets/{halo_app_bar.dart => halo_appbar.dart} (70%) create mode 100644 flutter_module/lib/common/widgets/halo_tabbar.dart create mode 100644 flutter_module/lib/pages/feedback/feedback_page.dart create mode 100644 flutter_module/lib/pages/feedback/help_fragment.dart create mode 100644 flutter_module/lib/pages/feedback/suggest_fragment.dart delete mode 100644 flutter_module/lib/pages/feedback_page.dart diff --git a/flutter_module/lib/common/colors.dart b/flutter_module/lib/common/colors.dart new file mode 100644 index 0000000000..4d8e008051 --- /dev/null +++ b/flutter_module/lib/common/colors.dart @@ -0,0 +1,8 @@ +import 'package:flutter/cupertino.dart'; + +class HaloColors { + HaloColors._(); + + static const color_1383EB = Color(0xFF1383EB); + static const color_666666 = Color(0xFF666666); +} \ No newline at end of file diff --git a/flutter_module/lib/common/widgets/halo_app_bar.dart b/flutter_module/lib/common/widgets/halo_appbar.dart similarity index 70% rename from flutter_module/lib/common/widgets/halo_app_bar.dart rename to flutter_module/lib/common/widgets/halo_appbar.dart index 20d9fd29f1..dfd9b4ba55 100644 --- a/flutter_module/lib/common/widgets/halo_app_bar.dart +++ b/flutter_module/lib/common/widgets/halo_appbar.dart @@ -50,28 +50,32 @@ class HaloAppBar extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { // 导航栏 - Widget navigationWidget = Positioned( - left: navigationMarginStart??15, - child: this.navigationWidget ?? - Glide( - navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), - width: navigationIconWidth ?? 24, - height: navigationIconHeight ?? 24 - ) - ); + Widget navigationWidget = this.navigationWidget ?? + Glide( + navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), + width: navigationIconWidth ?? 24, + height: navigationIconHeight ?? 24 + ); if (onNavigationPressed != null) - navigationWidget = GestureDetector( - onTap: onNavigationPressed, - child: navigationWidget + navigationWidget = IconButton( + onPressed: onNavigationPressed, + icon: navigationWidget, + splashRadius: 21, ); + navigationWidget = Positioned( + left: navigationMarginStart??0, + child: navigationWidget + ); // 标题栏 + TextStyle? appBarTextStyle = AppBarTheme.of(context).titleTextStyle; Widget titleWidget = this.titleWidget ?? Text( this.title, style: this.titleStyle??TextStyle( color: this.titleColor??Colors.black, - fontSize: this.titleSize??17, - fontWeight: FontWeight.w500 + fontSize: this.titleSize??15, + fontWeight: FontWeight.bold, + fontFamily: appBarTextStyle?.fontFamily ), ); @@ -88,13 +92,17 @@ class HaloAppBar extends StatelessWidget implements PreferredSizeWidget { } return SafeArea( - child: Stack( - alignment: Alignment.center, - children: [ - navigationWidget, - titleWidget, - menuWidget - ], + child: Container( + height: APP_BAR_SIZE, + alignment: Alignment.center, + child: Stack( + alignment: Alignment.center, + children: [ + navigationWidget, + titleWidget, + menuWidget + ], + ) ) ); } diff --git a/flutter_module/lib/common/widgets/halo_tabbar.dart b/flutter_module/lib/common/widgets/halo_tabbar.dart new file mode 100644 index 0000000000..ec5421061e --- /dev/null +++ b/flutter_module/lib/common/widgets/halo_tabbar.dart @@ -0,0 +1,58 @@ +/** + * 通用TabBar封装 + * 在原生TabBar基础上加入Halo的设计风格 + */ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_module/common/colors.dart'; + +class HaloTabBar extends StatelessWidget { + + static const DEFAULT_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.bold + ); + + static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.normal + ); + + final List tabs; + final TabController? controller; + final Color? labelColor; + final TextStyle? labelStyle; + final Color? unselectedLabelColor; + final TextStyle? unselectedLabelStyle; + final Decoration? indicator; + final Color? indicatorColor; + final double indicatorWeight; + final EdgeInsetsGeometry indicatorPadding; + + const HaloTabBar({ + Key? key, + required this.tabs, + this.controller, + this.labelColor, + this.labelStyle, + this.unselectedLabelColor, + this.unselectedLabelStyle, + this.indicator, + this.indicatorColor, + this.indicatorWeight: 3.0, + this.indicatorPadding: EdgeInsets.zero, + }) : super(key: key); + + @override + Widget build(BuildContext context) => TabBar( + tabs: tabs, + controller: controller, + labelStyle: labelStyle??DEFAULT_LABEL_STYLE, + labelColor: labelColor??HaloColors.color_1383EB, + unselectedLabelColor: unselectedLabelColor??HaloColors.color_666666, + unselectedLabelStyle: unselectedLabelStyle??DEFAULT_UNSELECTED_LABEL_STYLE, + indicator: indicator, + indicatorColor: indicatorColor, + indicatorWeight: indicatorWeight, + indicatorPadding: indicatorPadding, + ); + +} \ No newline at end of file diff --git a/flutter_module/lib/pages/feedback/feedback_page.dart b/flutter_module/lib/pages/feedback/feedback_page.dart new file mode 100644 index 0000000000..6555aeb447 --- /dev/null +++ b/flutter_module/lib/pages/feedback/feedback_page.dart @@ -0,0 +1,69 @@ +/** + * 帮助与反馈 + */ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_module/common/colors.dart'; +import 'package:flutter_module/common/widgets/halo_appbar.dart'; +import 'package:flutter_module/common/widgets/halo_tabbar.dart'; +import 'package:flutter_module/pages/feedback/help_fragment.dart'; +import 'package:flutter_module/pages/feedback/suggest_fragment.dart'; + +class FeedbackPage extends StatefulWidget { + @override + State createState() => FeedbackPageState(); +} + +class FeedbackPageState extends State with SingleTickerProviderStateMixin { + late TabController _controller; + + @override + void initState() { + super.initState(); + _controller = TabController(length: 2, vsync: this); + } + + @override + void dispose() { + super.dispose(); + _controller.dispose(); + } + + @override + Widget build(BuildContext context) => AnnotatedRegion( + value: const SystemUiOverlayStyle( + statusBarColor: Colors.white, + statusBarBrightness: Brightness.dark, + statusBarIconBrightness: Brightness.dark + ), // 修改状态栏颜色 + child: Scaffold( + appBar: HaloAppBar( + title: '帮助与反馈', + onNavigationPressed: () {} + ), + backgroundColor: Colors.white, + body: Column( + children: [ + HaloTabBar( + controller: _controller, + tabs: const [ + const Tab(text: "使用帮助"), + const Tab(text: "意见反馈") + ] + ), + Flexible( + child: TabBarView( + controller: _controller, + children: [ + const HelpFragment(), + const SuggestFragment(), + ] + ) + ) + ], + ) + ) + ); + +} \ No newline at end of file diff --git a/flutter_module/lib/pages/feedback/help_fragment.dart b/flutter_module/lib/pages/feedback/help_fragment.dart new file mode 100644 index 0000000000..1f72f68e22 --- /dev/null +++ b/flutter_module/lib/pages/feedback/help_fragment.dart @@ -0,0 +1,13 @@ +import 'package:flutter/cupertino.dart'; + +class HelpFragment extends StatelessWidget { + const HelpFragment(); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text("问题") + ], + ); + +} \ No newline at end of file diff --git a/flutter_module/lib/pages/feedback/suggest_fragment.dart b/flutter_module/lib/pages/feedback/suggest_fragment.dart new file mode 100644 index 0000000000..615f7185c1 --- /dev/null +++ b/flutter_module/lib/pages/feedback/suggest_fragment.dart @@ -0,0 +1,12 @@ +import 'package:flutter/cupertino.dart'; + +class SuggestFragment extends StatelessWidget { + + const SuggestFragment(); + + @override + Widget build(BuildContext context) => Center( + child: Text("建议"), + ); + +} \ No newline at end of file diff --git a/flutter_module/lib/pages/feedback_page.dart b/flutter_module/lib/pages/feedback_page.dart deleted file mode 100644 index 5aee440e72..0000000000 --- a/flutter_module/lib/pages/feedback_page.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_module/common/widgets/halo_app_bar.dart'; - -class FeedbackPage extends StatelessWidget { - - @override - Widget build(BuildContext context) => Scaffold( - appBar: const HaloAppBar(title: '意见与反馈'), - body: SafeArea( - child: Center( - child: Text("意见反馈") - ), - ) - ); - -} \ No newline at end of file diff --git a/flutter_module/lib/route.dart b/flutter_module/lib/route.dart index 572df00bc8..c1e236c81a 100644 --- a/flutter_module/lib/route.dart +++ b/flutter_module/lib/route.dart @@ -1,7 +1,7 @@ //@dart=2.9 import 'package:flutter/cupertino.dart'; import 'package:flutter_boost/flutter_boost.dart'; -import 'package:flutter_module/pages/feedback_page.dart'; +import 'package:flutter_module/pages/feedback/feedback_page.dart'; const String FEED_BACK = "feedback"; diff --git a/flutter_module/pubspec.lock b/flutter_module/pubspec.lock index 9c4f097078..0eb6384723 100644 --- a/flutter_module/pubspec.lock +++ b/flutter_module/pubspec.lock @@ -75,11 +75,11 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD - resolved-ref: "89607c04bb76cadb28f18bc589ca99baa82dddd8" + ref: "v1.0.6" + resolved-ref: "6f045a44093ac1079b6d20a0a1b85f036e8963f0" url: "https://github.com/axen1314/flutter_glide.git" source: git - version: "0.0.1" + version: "1.0.6" flutter_test: dependency: "direct dev" description: flutter diff --git a/flutter_module/pubspec.yaml b/flutter_module/pubspec.yaml index 7142d4a034..18b84be5c6 100644 --- a/flutter_module/pubspec.yaml +++ b/flutter_module/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter_glide: git: url: 'https://github.com/axen1314/flutter_glide.git' + ref: 'v1.0.6' # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/flutter_module/test/widget_test.dart b/flutter_module/test/widget_test.dart index 57e665824c..e8d38e2cd0 100644 --- a/flutter_module/test/widget_test.dart +++ b/flutter_module/test/widget_test.dart @@ -1,3 +1,4 @@ +// @dart = 2.9 // This is a basic Flutter widget test. // // To perform an interaction with a widget in your test, use the WidgetTester @@ -6,6 +7,7 @@ // tree, read text, and verify that the values of widget properties are correct. import 'package:flutter/material.dart'; +import 'package:flutter_module/pages/feedback/feedback_page.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_module/main.dart'; @@ -27,4 +29,8 @@ void main() { expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); }); + + testWidgets("Feedback page test", (WidgetTester tester) async { + await tester.pumpWidget(MaterialApp(home: FeedbackPage())); + }); } From c203fa5b9d3ce048aced7434ed0c589c966861d5 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 16 Aug 2021 16:24:40 +0800 Subject: [PATCH 03/89] =?UTF-8?q?Updated=20=E5=AE=8C=E6=88=90=E9=80=9A?= =?UTF-8?q?=E7=94=A8tabbar=E5=BC=80=E5=8F=91=20Updated=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=A1=B9=E7=9B=AE=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gitignore | 0 .../.metadata | 0 .../README.md | 0 .../lib/common/assistant_app.dart | 20 ++++ .../lib/common/assistant_appbar.dart | 4 +- .../lib/common/assistant_binding.dart | 8 ++ .../lib/common/assistant_colors.dart | 10 ++ .../lib/common/assistant_routes.dart | 2 +- .../lib/common/assistant_tab_indicator.dart | 80 +++++++++++++ .../lib/common/assistant_tabbar.dart | 106 ++++++++++++++++++ .../lib/common/assistant_tabbar_view.dart | 25 +++++ assistant-flutter/lib/main.dart | 13 +++ .../lib/pages/feedback/feedback_page.dart | 30 +++-- .../feedback/fragments}/help_fragment.dart | 1 + .../feedback/fragments}/suggest_fragment.dart | 0 .../pubspec.lock | 0 .../pubspec.yaml | 8 +- .../settings.gradle | 0 .../test/widget_test.dart | 7 +- flutter_module/lib/common/colors.dart | 8 -- .../lib/common/widgets/halo_tabbar.dart | 58 ---------- flutter_module/lib/main.dart | 31 ----- settings.gradle | 2 +- 23 files changed, 289 insertions(+), 124 deletions(-) rename {flutter_module => assistant-flutter}/.gitignore (100%) rename {flutter_module => assistant-flutter}/.metadata (100%) rename {flutter_module => assistant-flutter}/README.md (100%) create mode 100644 assistant-flutter/lib/common/assistant_app.dart rename flutter_module/lib/common/widgets/halo_appbar.dart => assistant-flutter/lib/common/assistant_appbar.dart (96%) create mode 100644 assistant-flutter/lib/common/assistant_binding.dart create mode 100644 assistant-flutter/lib/common/assistant_colors.dart rename flutter_module/lib/route.dart => assistant-flutter/lib/common/assistant_routes.dart (89%) create mode 100644 assistant-flutter/lib/common/assistant_tab_indicator.dart create mode 100644 assistant-flutter/lib/common/assistant_tabbar.dart create mode 100644 assistant-flutter/lib/common/assistant_tabbar_view.dart create mode 100644 assistant-flutter/lib/main.dart rename {flutter_module => assistant-flutter}/lib/pages/feedback/feedback_page.dart (65%) rename {flutter_module/lib/pages/feedback => assistant-flutter/lib/pages/feedback/fragments}/help_fragment.dart (81%) rename {flutter_module/lib/pages/feedback => assistant-flutter/lib/pages/feedback/fragments}/suggest_fragment.dart (100%) rename {flutter_module => assistant-flutter}/pubspec.lock (100%) rename {flutter_module => assistant-flutter}/pubspec.yaml (95%) rename {flutter_module => assistant-flutter}/settings.gradle (100%) rename {flutter_module => assistant-flutter}/test/widget_test.dart (84%) delete mode 100644 flutter_module/lib/common/colors.dart delete mode 100644 flutter_module/lib/common/widgets/halo_tabbar.dart delete mode 100644 flutter_module/lib/main.dart diff --git a/flutter_module/.gitignore b/assistant-flutter/.gitignore similarity index 100% rename from flutter_module/.gitignore rename to assistant-flutter/.gitignore diff --git a/flutter_module/.metadata b/assistant-flutter/.metadata similarity index 100% rename from flutter_module/.metadata rename to assistant-flutter/.metadata diff --git a/flutter_module/README.md b/assistant-flutter/README.md similarity index 100% rename from flutter_module/README.md rename to assistant-flutter/README.md diff --git a/assistant-flutter/lib/common/assistant_app.dart b/assistant-flutter/lib/common/assistant_app.dart new file mode 100644 index 0000000000..9948af5a51 --- /dev/null +++ b/assistant-flutter/lib/common/assistant_app.dart @@ -0,0 +1,20 @@ +//@dart=2.9 +import 'package:assistant/common/assistant_routes.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_boost/flutter_boost.dart'; + +class AssistantApp extends StatefulWidget { + @override + State createState() => AssistantAppState(); +} + +class AssistantAppState extends State { + + Route _buildRoute(RouteSettings settings, String uniqueId) { + FlutterBoostRouteFactory func = routes[settings.name]; + return func?.call(settings, uniqueId); + } + + @override + Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); +} \ No newline at end of file diff --git a/flutter_module/lib/common/widgets/halo_appbar.dart b/assistant-flutter/lib/common/assistant_appbar.dart similarity index 96% rename from flutter_module/lib/common/widgets/halo_appbar.dart rename to assistant-flutter/lib/common/assistant_appbar.dart index dfd9b4ba55..98c803eb4b 100644 --- a/flutter_module/lib/common/widgets/halo_appbar.dart +++ b/assistant-flutter/lib/common/assistant_appbar.dart @@ -3,7 +3,7 @@ import 'package:flutter/cupertino.dart' hide ImageProvider; import 'package:flutter/material.dart' hide ImageProvider; import 'package:flutter_glide/flutter_glide.dart'; -class HaloAppBar extends StatelessWidget implements PreferredSizeWidget { +class AssistantAppBar extends StatelessWidget implements PreferredSizeWidget { static const double APP_BAR_SIZE = 48; static const String DEFAULT_NAVIGATION_ICON = "R.drawable.ic_bar_back"; @@ -29,7 +29,7 @@ class HaloAppBar extends StatelessWidget implements PreferredSizeWidget { - const HaloAppBar({ + const AssistantAppBar({ Key? key, required this.title, this.titleSize, diff --git a/assistant-flutter/lib/common/assistant_binding.dart b/assistant-flutter/lib/common/assistant_binding.dart new file mode 100644 index 0000000000..c2362e338b --- /dev/null +++ b/assistant-flutter/lib/common/assistant_binding.dart @@ -0,0 +1,8 @@ +//@dart=2.9 +import 'package:flutter_boost/flutter_boost.dart'; +import 'package:flutter/material.dart'; + +//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding +//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 +//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 +class AssistantFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_colors.dart b/assistant-flutter/lib/common/assistant_colors.dart new file mode 100644 index 0000000000..5136e2caa7 --- /dev/null +++ b/assistant-flutter/lib/common/assistant_colors.dart @@ -0,0 +1,10 @@ +import 'package:flutter/cupertino.dart'; + +class AssistantColors { + AssistantColors._(); + + static const color_primary = const Color(0xFF1383EB); + + static const color_666666 = const Color(0xFF666666); + static const color_eeeeee = const Color(0xFFEEEEEE); +} \ No newline at end of file diff --git a/flutter_module/lib/route.dart b/assistant-flutter/lib/common/assistant_routes.dart similarity index 89% rename from flutter_module/lib/route.dart rename to assistant-flutter/lib/common/assistant_routes.dart index c1e236c81a..148f8f1991 100644 --- a/flutter_module/lib/route.dart +++ b/assistant-flutter/lib/common/assistant_routes.dart @@ -1,7 +1,7 @@ //@dart=2.9 import 'package:flutter/cupertino.dart'; import 'package:flutter_boost/flutter_boost.dart'; -import 'package:flutter_module/pages/feedback/feedback_page.dart'; +import 'package:assistant/pages/feedback/feedback_page.dart'; const String FEED_BACK = "feedback"; diff --git a/assistant-flutter/lib/common/assistant_tab_indicator.dart b/assistant-flutter/lib/common/assistant_tab_indicator.dart new file mode 100644 index 0000000000..297a7a05ee --- /dev/null +++ b/assistant-flutter/lib/common/assistant_tab_indicator.dart @@ -0,0 +1,80 @@ +/** + * 自定义TabIndicator + */ +import 'package:assistant/common/assistant_tabbar.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +enum TabBarIndicatorShape { + /// 圆角方形指示器 + round, + /// 方形指示器 + square +} + +/// 自定义TabBar指示器 +/// 该指示器实现了如下功能: +/// 1.支持指示器设置固定宽度 +/// 2.支持指示器设置为圆角矩形 +/// 该TabBar指示器类已作为默认指示器类应用于[AssistantTabBar] +class UnderlineTabIndicator extends Decoration { + /// TabBar指示器的宽度 + /// 传空则宽度根据原生指示器的规则计算宽度 + final double? indicatorWidth; + /// TabBar指示器的形状 + final TabBarIndicatorShape? border; + + const UnderlineTabIndicator({ + this.border, + this.indicatorWidth, + this.borderSide = const BorderSide( + width: 2.0, + color: Colors.white + ), + this.insets = EdgeInsets.zero, + + }); + + final BorderSide borderSide; + + final EdgeInsetsGeometry insets; + + @override + BoxPainter createBoxPainter([VoidCallback? onChanged]) { + return _UnderlinePainter(this, onChanged, border: border); + } + + Rect _indicatorRectFor(Rect rect, TextDirection textDirection) { + final Rect indicator = insets.resolve(textDirection).deflateRect(rect); + final isValid = indicatorWidth != null && indicatorWidth! < indicator.width; + final left = isValid ? indicator.left + indicatorWidth! : indicator.left; + final width = isValid ? indicatorWidth! : indicator.width; + return Rect.fromLTWH( + left, + indicator.bottom - borderSide.width, + width, + borderSide.width, + ); + } +} + +/// 自定义TabBar指示器画笔 +class _UnderlinePainter extends BoxPainter { + final UnderlineTabIndicator decoration; + + final TabBarIndicatorShape? border; + + _UnderlinePainter(this.decoration, VoidCallback? callback, {this.border}): super(callback); + + @override + void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) { + final Rect rect = offset & configuration.size!; + final TextDirection textDirection = configuration.textDirection!; + final Rect indicator = decoration._indicatorRectFor(rect, textDirection).deflate(decoration.borderSide.width / 2.0); + final TabBarIndicatorShape border = this.border ?? TabBarIndicatorShape.round; + final StrokeCap strokeCap = border == TabBarIndicatorShape.round ? StrokeCap.round : StrokeCap.square; + final Paint paint = decoration.borderSide.toPaint()..strokeCap = strokeCap; + canvas.drawLine(indicator.bottomLeft, indicator.bottomRight, paint); + } + +} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_tabbar.dart b/assistant-flutter/lib/common/assistant_tabbar.dart new file mode 100644 index 0000000000..9f2e963948 --- /dev/null +++ b/assistant-flutter/lib/common/assistant_tabbar.dart @@ -0,0 +1,106 @@ +/** + * 通用TabBar封装 + * 在原生TabBar基础上加入Halo的设计风格 + */ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart' hide UnderlineTabIndicator; +import 'package:assistant/common/assistant_colors.dart'; +import 'package:assistant/common/assistant_tab_indicator.dart'; + +class AssistantTabBar extends StatelessWidget { + + static const DEFAULT_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.bold + ); + + static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.normal + ); + + static const DEFAULT_DECORATION = const BoxDecoration( + border: const Border( + bottom: const BorderSide( + width: 1.0, + color: AssistantColors.color_eeeeee + ) + ) + ); + + final List tabs; + final TabController? controller; + final Color? labelColor; + final TextStyle? labelStyle; + final Color? unselectedLabelColor; + final TextStyle? unselectedLabelStyle; + final Decoration? indicator; + final TabBarIndicatorSize? indicatorSize; + final Color? indicatorColor; + + /// TabBar的边距 + final Decoration? border; + + /// 指示器的宽度 + /// 默认情况下为空,则会根据[TabBarIndicatorSize]确定指示器宽度大小 + /// 否则指示器的宽度为传入的值大小 + final double? indicatorWidth; + + /// 指示器边角的形状 + final TabBarIndicatorShape? indicatorBorder; + + final double? indicatorWeight; + final EdgeInsetsGeometry? indicatorPadding; + + const AssistantTabBar({ + Key? key, + required this.tabs, + this.controller, + this.border, + this.labelColor, + this.labelStyle, + this.unselectedLabelColor, + this.unselectedLabelStyle, + this.indicator, + this.indicatorColor, + this.indicatorSize, + this.indicatorBorder, + this.indicatorWidth, + this.indicatorWeight, + this.indicatorPadding, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + double indicatorWeight = this.indicatorWeight ?? 3.0; + double indicatorWidth = this.indicatorWidth ?? 20; + Color indicatorColor = this.indicatorColor ?? Theme.of(context).indicatorColor; + Decoration indicator = this.indicator ?? UnderlineTabIndicator( + borderSide: BorderSide( + width: indicatorWeight, + color: indicatorColor, + ), + border: indicatorBorder, + indicatorWidth: indicatorWidth + ); + return Theme( + data: ThemeData( + splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明 + highlightColor: Colors.transparent // 点击时的背景高亮颜色设置为透明 + ), + child: DecoratedBox( + decoration: border ?? DEFAULT_DECORATION, + child: TabBar( + tabs: tabs, + indicator: indicator, + controller: controller, + labelStyle: labelStyle ?? DEFAULT_LABEL_STYLE,// Tab选中字体样式 + labelColor: labelColor ?? AssistantColors.color_primary,// Tab选中字体颜色 + unselectedLabelColor: unselectedLabelColor ?? AssistantColors.color_666666,// Tab未选中字体颜色 + unselectedLabelStyle: unselectedLabelStyle ?? DEFAULT_UNSELECTED_LABEL_STYLE,// Tab未选中字体样式 + indicatorSize: indicatorSize ?? TabBarIndicatorSize.label,// 指示器宽度计算模式 + indicatorPadding: indicatorPadding ?? EdgeInsets.zero// 指示器内边距 + ) + ) + ); + } + +} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_tabbar_view.dart b/assistant-flutter/lib/common/assistant_tabbar_view.dart new file mode 100644 index 0000000000..14c49533a7 --- /dev/null +++ b/assistant-flutter/lib/common/assistant_tabbar_view.dart @@ -0,0 +1,25 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class AssistantTabBarView extends StatelessWidget { + final bool flex; + final List children; + final TabController? controller; + + const AssistantTabBarView({ + this.flex: true, + this.controller, + required this.children + }); + + @override + Widget build(BuildContext context) { + Widget child = TabBarView( + controller: controller, + children: children + ); + if (flex) child = Flexible(child: child); + return child; + } + +} \ No newline at end of file diff --git a/assistant-flutter/lib/main.dart b/assistant-flutter/lib/main.dart new file mode 100644 index 0000000000..7d7c041eab --- /dev/null +++ b/assistant-flutter/lib/main.dart @@ -0,0 +1,13 @@ +//@dart=2.9 +import 'package:assistant/common/assistant_app.dart'; +import 'package:assistant/common/assistant_binding.dart'; +import 'package:flutter/material.dart'; + +void main() { + AssistantFlutterBinding();// FlutterBoostBinding初始化 + runApp(AssistantApp());// 启动App +} + + + + diff --git a/flutter_module/lib/pages/feedback/feedback_page.dart b/assistant-flutter/lib/pages/feedback/feedback_page.dart similarity index 65% rename from flutter_module/lib/pages/feedback/feedback_page.dart rename to assistant-flutter/lib/pages/feedback/feedback_page.dart index 6555aeb447..3bbe35cc04 100644 --- a/flutter_module/lib/pages/feedback/feedback_page.dart +++ b/assistant-flutter/lib/pages/feedback/feedback_page.dart @@ -4,11 +4,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_module/common/colors.dart'; -import 'package:flutter_module/common/widgets/halo_appbar.dart'; -import 'package:flutter_module/common/widgets/halo_tabbar.dart'; -import 'package:flutter_module/pages/feedback/help_fragment.dart'; -import 'package:flutter_module/pages/feedback/suggest_fragment.dart'; +import 'package:assistant/common/assistant_appbar.dart'; +import 'package:assistant/common/assistant_tabbar.dart'; +import 'package:assistant/common/assistant_tabbar_view.dart'; +import 'package:assistant/pages/feedback/fragments/help_fragment.dart'; +import 'package:assistant/pages/feedback/fragments/suggest_fragment.dart'; class FeedbackPage extends StatefulWidget { @override @@ -33,33 +33,31 @@ class FeedbackPageState extends State with SingleTickerProviderSta @override Widget build(BuildContext context) => AnnotatedRegion( value: const SystemUiOverlayStyle( - statusBarColor: Colors.white, + statusBarColor: Colors.transparent, statusBarBrightness: Brightness.dark, statusBarIconBrightness: Brightness.dark ), // 修改状态栏颜色 child: Scaffold( - appBar: HaloAppBar( + appBar: AssistantAppBar( title: '帮助与反馈', onNavigationPressed: () {} ), backgroundColor: Colors.white, body: Column( children: [ - HaloTabBar( + AssistantTabBar( controller: _controller, tabs: const [ const Tab(text: "使用帮助"), const Tab(text: "意见反馈") ] ), - Flexible( - child: TabBarView( - controller: _controller, - children: [ - const HelpFragment(), - const SuggestFragment(), - ] - ) + AssistantTabBarView( + controller: _controller, + children: [ + const HelpFragment(), + const SuggestFragment(), + ] ) ], ) diff --git a/flutter_module/lib/pages/feedback/help_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart similarity index 81% rename from flutter_module/lib/pages/feedback/help_fragment.dart rename to assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart index 1f72f68e22..6c29f079cf 100644 --- a/flutter_module/lib/pages/feedback/help_fragment.dart +++ b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart @@ -5,6 +5,7 @@ class HelpFragment extends StatelessWidget { @override Widget build(BuildContext context) => Column( + mainAxisAlignment: MainAxisAlignment.center, children: [ Text("问题") ], diff --git a/flutter_module/lib/pages/feedback/suggest_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart similarity index 100% rename from flutter_module/lib/pages/feedback/suggest_fragment.dart rename to assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart diff --git a/flutter_module/pubspec.lock b/assistant-flutter/pubspec.lock similarity index 100% rename from flutter_module/pubspec.lock rename to assistant-flutter/pubspec.lock diff --git a/flutter_module/pubspec.yaml b/assistant-flutter/pubspec.yaml similarity index 95% rename from flutter_module/pubspec.yaml rename to assistant-flutter/pubspec.yaml index 18b84be5c6..aeedf7866c 100644 --- a/flutter_module/pubspec.yaml +++ b/assistant-flutter/pubspec.yaml @@ -1,5 +1,5 @@ -name: flutter_module -description: The Assistant Flutter moudle. +name: assistant +description: 光环助手Flutter模块 # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -91,5 +91,5 @@ flutter: # identifiers, which may be completely independent or the same as these. module: androidX: true - androidPackage: com.halo.assistant.flutter_module - iosBundleIdentifier: com.halo.assistant.flutterModule + androidPackage: com.halo.assistant.flutter + iosBundleIdentifier: com.halo.assistant.flutter diff --git a/flutter_module/settings.gradle b/assistant-flutter/settings.gradle similarity index 100% rename from flutter_module/settings.gradle rename to assistant-flutter/settings.gradle diff --git a/flutter_module/test/widget_test.dart b/assistant-flutter/test/widget_test.dart similarity index 84% rename from flutter_module/test/widget_test.dart rename to assistant-flutter/test/widget_test.dart index e8d38e2cd0..1f38f29004 100644 --- a/flutter_module/test/widget_test.dart +++ b/assistant-flutter/test/widget_test.dart @@ -6,16 +6,17 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. +import 'package:assistant/common/assistant_app.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_module/pages/feedback/feedback_page.dart'; +import 'package:assistant/pages/feedback/feedback_page.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_module/main.dart'; +import 'package:assistant/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(HaloApp()); + await tester.pumpWidget(AssistantApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget); diff --git a/flutter_module/lib/common/colors.dart b/flutter_module/lib/common/colors.dart deleted file mode 100644 index 4d8e008051..0000000000 --- a/flutter_module/lib/common/colors.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class HaloColors { - HaloColors._(); - - static const color_1383EB = Color(0xFF1383EB); - static const color_666666 = Color(0xFF666666); -} \ No newline at end of file diff --git a/flutter_module/lib/common/widgets/halo_tabbar.dart b/flutter_module/lib/common/widgets/halo_tabbar.dart deleted file mode 100644 index ec5421061e..0000000000 --- a/flutter_module/lib/common/widgets/halo_tabbar.dart +++ /dev/null @@ -1,58 +0,0 @@ -/** - * 通用TabBar封装 - * 在原生TabBar基础上加入Halo的设计风格 - */ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_module/common/colors.dart'; - -class HaloTabBar extends StatelessWidget { - - static const DEFAULT_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.bold - ); - - static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.normal - ); - - final List tabs; - final TabController? controller; - final Color? labelColor; - final TextStyle? labelStyle; - final Color? unselectedLabelColor; - final TextStyle? unselectedLabelStyle; - final Decoration? indicator; - final Color? indicatorColor; - final double indicatorWeight; - final EdgeInsetsGeometry indicatorPadding; - - const HaloTabBar({ - Key? key, - required this.tabs, - this.controller, - this.labelColor, - this.labelStyle, - this.unselectedLabelColor, - this.unselectedLabelStyle, - this.indicator, - this.indicatorColor, - this.indicatorWeight: 3.0, - this.indicatorPadding: EdgeInsets.zero, - }) : super(key: key); - - @override - Widget build(BuildContext context) => TabBar( - tabs: tabs, - controller: controller, - labelStyle: labelStyle??DEFAULT_LABEL_STYLE, - labelColor: labelColor??HaloColors.color_1383EB, - unselectedLabelColor: unselectedLabelColor??HaloColors.color_666666, - unselectedLabelStyle: unselectedLabelStyle??DEFAULT_UNSELECTED_LABEL_STYLE, - indicator: indicator, - indicatorColor: indicatorColor, - indicatorWeight: indicatorWeight, - indicatorPadding: indicatorPadding, - ); - -} \ No newline at end of file diff --git a/flutter_module/lib/main.dart b/flutter_module/lib/main.dart deleted file mode 100644 index db9565c933..0000000000 --- a/flutter_module/lib/main.dart +++ /dev/null @@ -1,31 +0,0 @@ -//@dart=2.9 -import 'package:flutter/material.dart'; -import 'package:flutter_boost/boost_flutter_binding.dart'; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:flutter_module/route.dart'; - -void main() { - HaloFlutterBinding(); - runApp(HaloApp()); -} - -class HaloApp extends StatefulWidget { - @override - State createState() => HaloAppState(); -} - -class HaloAppState extends State { - - Route _buildRoute(RouteSettings settings, String uniqueId) { - FlutterBoostRouteFactory func = routes[settings.name]; - return func?.call(settings, uniqueId); - } - - @override - Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); -} - -//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding -//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 -//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 -class HaloFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} diff --git a/settings.gradle b/settings.gradle index 510a153f23..f8a94a7a3b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir, - 'flutter_module/.android/include_flutter.groovy' + 'assistant-flutter/.android/include_flutter.groovy' )) //include ':libraries:im' include ':libraries:LGLibrary' From 9679c75f0a1d102b24c84acbae255c8e73d51fc4 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 16 Aug 2021 16:53:28 +0800 Subject: [PATCH 04/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89SearchBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/common/assistant_search_bar.dart | 25 +++++++++++++++++++ .../feedback/fragments/help_fragment.dart | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 assistant-flutter/lib/common/assistant_search_bar.dart diff --git a/assistant-flutter/lib/common/assistant_search_bar.dart b/assistant-flutter/lib/common/assistant_search_bar.dart new file mode 100644 index 0000000000..746f28683b --- /dev/null +++ b/assistant-flutter/lib/common/assistant_search_bar.dart @@ -0,0 +1,25 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class AssistantSearchBar extends StatelessWidget { + final TextEditingController? controller; + + const AssistantSearchBar({this.controller}) : super(); + + @override + Widget build(BuildContext context) => Container( + child: Row( + children: [ + Flexible( + child: TextField( + controller: controller, + decoration: const InputDecoration( + hintText: "请输入关键词搜索", + ), + ) + ) + ], + ), + ); + +} \ No newline at end of file diff --git a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart index 6c29f079cf..e88b57772b 100644 --- a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart +++ b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart @@ -1,3 +1,4 @@ +import 'package:assistant/common/assistant_search_bar.dart'; import 'package:flutter/cupertino.dart'; class HelpFragment extends StatelessWidget { @@ -7,7 +8,7 @@ class HelpFragment extends StatelessWidget { Widget build(BuildContext context) => Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text("问题") + AssistantSearchBar() ], ); From 9993824d93fb57a655d7fa926ff9144ecdc29d30 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 16 Aug 2021 19:11:03 +0800 Subject: [PATCH 05/89] =?UTF-8?q?Updated=20=E5=B0=86Flutter=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E8=AE=BE=E4=B8=BA=E5=AD=90module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 4 + assistant-flutter/.gitignore | 5 + assistant-flutter/assistant_design/.gitignore | 75 +++++++++ assistant-flutter/assistant_design/.metadata | 10 ++ .../assistant_design/CHANGELOG.md | 3 + assistant-flutter/assistant_design/LICENSE | 1 + assistant-flutter/assistant_design/README.md | 14 ++ .../lib/assistant_design.dart | 11 ++ .../assistant_design/lib/colors.dart | 10 ++ .../assistant_design/lib/widgets/app_bar.dart | 113 +++++++++++++ .../lib/widgets/search_bar.dart | 30 ++++ .../assistant_design/lib/widgets/tab_bar.dart | 104 ++++++++++++ .../lib/widgets/tab_bar_view.dart | 25 +++ .../lib/widgets/tab_indicator.dart | 77 +++++++++ .../assistant_design/pubspec.lock | 156 ++++++++++++++++++ .../assistant_design/pubspec.yaml | 57 +++++++ .../test/assistant_design_test.dart | 3 + assistant-flutter/lib/common/app.dart | 25 +++ assistant-flutter/lib/common/routes.dart | 23 +++ assistant-flutter/lib/main.dart | 3 +- .../lib/pages/feedback/feedback_page.dart | 9 +- .../feedback/fragments/help_fragment.dart | 3 +- assistant-flutter/pubspec.lock | 9 +- assistant-flutter/pubspec.yaml | 7 +- assistant-flutter/settings.gradle | 5 +- assistant-flutter/test/widget_test.dart | 4 +- 26 files changed, 766 insertions(+), 20 deletions(-) create mode 100644 assistant-flutter/assistant_design/.gitignore create mode 100644 assistant-flutter/assistant_design/.metadata create mode 100644 assistant-flutter/assistant_design/CHANGELOG.md create mode 100644 assistant-flutter/assistant_design/LICENSE create mode 100644 assistant-flutter/assistant_design/README.md create mode 100644 assistant-flutter/assistant_design/lib/assistant_design.dart create mode 100644 assistant-flutter/assistant_design/lib/colors.dart create mode 100644 assistant-flutter/assistant_design/lib/widgets/app_bar.dart create mode 100644 assistant-flutter/assistant_design/lib/widgets/search_bar.dart create mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_bar.dart create mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart create mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart create mode 100644 assistant-flutter/assistant_design/pubspec.lock create mode 100644 assistant-flutter/assistant_design/pubspec.yaml create mode 100644 assistant-flutter/assistant_design/test/assistant_design_test.dart create mode 100644 assistant-flutter/lib/common/app.dart create mode 100644 assistant-flutter/lib/common/routes.dart diff --git a/.gitmodules b/.gitmodules index 39515fb249..31e8bdf1c6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,7 @@ path = libraries/LGLibrary url = git@git.ghzs.com:android/common-library.git branch = master +[submodule "flutter-module"] + path = flutter-module + url = git@git.ghzs.com:halo/android/flutter-module.git + branch = dev diff --git a/assistant-flutter/.gitignore b/assistant-flutter/.gitignore index ff612b3be4..1299e9ac15 100644 --- a/assistant-flutter/.gitignore +++ b/assistant-flutter/.gitignore @@ -3,6 +3,7 @@ .packages .pub/ +.gradle .idea/ .vagrant/ @@ -46,3 +47,7 @@ app.*.symbols # Obfuscation related app.*.map.json +/gradlew +/gradlew.bat +/local.properties +/gradle/ diff --git a/assistant-flutter/assistant_design/.gitignore b/assistant-flutter/assistant_design/.gitignore new file mode 100644 index 0000000000..a247422ef7 --- /dev/null +++ b/assistant-flutter/assistant_design/.gitignore @@ -0,0 +1,75 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/ephemeral +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/Flutter/flutter_export_environment.sh +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 diff --git a/assistant-flutter/assistant_design/.metadata b/assistant-flutter/assistant_design/.metadata new file mode 100644 index 0000000000..ecb604572c --- /dev/null +++ b/assistant-flutter/assistant_design/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 02c026b03cd31dd3f867e5faeb7e104cce174c5f + channel: unknown + +project_type: package diff --git a/assistant-flutter/assistant_design/CHANGELOG.md b/assistant-flutter/assistant_design/CHANGELOG.md new file mode 100644 index 0000000000..41cc7d8192 --- /dev/null +++ b/assistant-flutter/assistant_design/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/assistant-flutter/assistant_design/LICENSE b/assistant-flutter/assistant_design/LICENSE new file mode 100644 index 0000000000..ba75c69f7f --- /dev/null +++ b/assistant-flutter/assistant_design/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/assistant-flutter/assistant_design/README.md b/assistant-flutter/assistant_design/README.md new file mode 100644 index 0000000000..33efbe4417 --- /dev/null +++ b/assistant-flutter/assistant_design/README.md @@ -0,0 +1,14 @@ +# assistant_design + +光环助手Flutter组件库. + +## Getting Started + +This project is a starting point for a Dart +[package](https://flutter.dev/developing-packages/), +a library module containing code that can be shared easily across +multiple Flutter or Dart projects. + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/assistant-flutter/assistant_design/lib/assistant_design.dart b/assistant-flutter/assistant_design/lib/assistant_design.dart new file mode 100644 index 0000000000..7901311723 --- /dev/null +++ b/assistant-flutter/assistant_design/lib/assistant_design.dart @@ -0,0 +1,11 @@ +library assistant_design; + +export 'colors.dart'; +export 'widgets/app_bar.dart'; +export 'widgets/search_bar.dart'; +export 'widgets/tab_bar.dart'; +export 'widgets/tab_bar_view.dart'; +export 'widgets/tab_indicator.dart'; + + + diff --git a/assistant-flutter/assistant_design/lib/colors.dart b/assistant-flutter/assistant_design/lib/colors.dart new file mode 100644 index 0000000000..5136e2caa7 --- /dev/null +++ b/assistant-flutter/assistant_design/lib/colors.dart @@ -0,0 +1,10 @@ +import 'package:flutter/cupertino.dart'; + +class AssistantColors { + AssistantColors._(); + + static const color_primary = const Color(0xFF1383EB); + + static const color_666666 = const Color(0xFF666666); + static const color_eeeeee = const Color(0xFFEEEEEE); +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/app_bar.dart b/assistant-flutter/assistant_design/lib/widgets/app_bar.dart new file mode 100644 index 0000000000..98c803eb4b --- /dev/null +++ b/assistant-flutter/assistant_design/lib/widgets/app_bar.dart @@ -0,0 +1,113 @@ + +import 'package:flutter/cupertino.dart' hide ImageProvider; +import 'package:flutter/material.dart' hide ImageProvider; +import 'package:flutter_glide/flutter_glide.dart'; + +class AssistantAppBar extends StatelessWidget implements PreferredSizeWidget { + static const double APP_BAR_SIZE = 48; + static const String DEFAULT_NAVIGATION_ICON = "R.drawable.ic_bar_back"; + + // 标题栏 + final String title;// 标题文案 + final double? titleSize;// 标题字体大小 + final Color? titleColor;// 标题字体颜色 + final TextStyle? titleStyle;// 标题字体样式 + final Widget? titleWidget;// 自定义标题控件 + + // 导航按钮 + final ImageProvider? navigationIcon;// 导航按钮图标 + final double? navigationMarginStart;// 导航按钮左间隔 + final double? navigationIconWidth;// 导航按钮宽度 + final double? navigationIconHeight;// 导航按钮高度 + final Widget? navigationWidget;// 自定导航按钮控件 + final VoidCallback? onNavigationPressed;// 导航按钮点击事件 + + // 菜单栏 + final Widget? menuWidget; // 自定义菜单控件 + final double? menuMarginEnd; // 菜单右间隔 + final VoidCallback? onMenuPressed;// 菜单点击事件 + + + + const AssistantAppBar({ + Key? key, + required this.title, + this.titleSize, + this.titleColor, + this.titleStyle, + this.titleWidget, + this.navigationWidget, + this.navigationIcon, + this.onNavigationPressed, + this.navigationIconWidth, + this.navigationIconHeight, + this.navigationMarginStart, + this.menuWidget, + this.menuMarginEnd, + this.onMenuPressed, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + // 导航栏 + Widget navigationWidget = this.navigationWidget ?? + Glide( + navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), + width: navigationIconWidth ?? 24, + height: navigationIconHeight ?? 24 + ); + if (onNavigationPressed != null) + navigationWidget = IconButton( + onPressed: onNavigationPressed, + icon: navigationWidget, + splashRadius: 21, + ); + navigationWidget = Positioned( + left: navigationMarginStart??0, + child: navigationWidget + ); + + // 标题栏 + TextStyle? appBarTextStyle = AppBarTheme.of(context).titleTextStyle; + Widget titleWidget = this.titleWidget ?? Text( + this.title, + style: this.titleStyle??TextStyle( + color: this.titleColor??Colors.black, + fontSize: this.titleSize??15, + fontWeight: FontWeight.bold, + fontFamily: appBarTextStyle?.fontFamily + ), + ); + + // 菜单栏 + Widget menuWidget = Container(); + if (this.menuWidget != null) { + menuWidget = Positioned( + right: this.menuMarginEnd??15, + child: this.onMenuPressed != null ? GestureDetector( + onTap: this.onMenuPressed, + child: this.menuWidget + ) : this.menuWidget! + ); + } + + return SafeArea( + child: Container( + height: APP_BAR_SIZE, + alignment: Alignment.center, + child: Stack( + alignment: Alignment.center, + children: [ + navigationWidget, + titleWidget, + menuWidget + ], + ) + ) + ); + } + + @override + Size get preferredSize => Size.fromHeight(APP_BAR_SIZE); + +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/search_bar.dart b/assistant-flutter/assistant_design/lib/widgets/search_bar.dart new file mode 100644 index 0000000000..fb49f5932e --- /dev/null +++ b/assistant-flutter/assistant_design/lib/widgets/search_bar.dart @@ -0,0 +1,30 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class AssistantSearchBar extends StatelessWidget { + final TextEditingController? controller; + + const AssistantSearchBar({this.controller}) : super(); + + @override + Widget build(BuildContext context) => Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Flexible( + child: TextField( + controller: controller, + decoration: const InputDecoration( + hintText: "请输入关键词搜索", + ), + ) + ), + TextButton( + onPressed: () {}, + child: Text("搜索") + ) + ], + ), + ); + +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart b/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart new file mode 100644 index 0000000000..ca35ca2ca7 --- /dev/null +++ b/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart @@ -0,0 +1,104 @@ +import 'package:assistant_design/colors.dart'; +import 'tab_indicator.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart' hide UnderlineTabIndicator; + +/// 通用TabBar封装 +/// 在原生TabBar基础上加入Halo的设计风格 +class AssistantTabBar extends StatelessWidget { + + static const DEFAULT_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.bold + ); + + static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( + fontWeight: FontWeight.normal + ); + + static const DEFAULT_DECORATION = const BoxDecoration( + border: const Border( + bottom: const BorderSide( + width: 1.0, + color: AssistantColors.color_eeeeee + ) + ) + ); + + final List tabs; + final TabController? controller; + final Color? labelColor; + final TextStyle? labelStyle; + final Color? unselectedLabelColor; + final TextStyle? unselectedLabelStyle; + final Decoration? indicator; + final TabBarIndicatorSize? indicatorSize; + final Color? indicatorColor; + + /// TabBar的边距 + final Decoration? border; + + /// 指示器的宽度 + /// 默认情况下为空,则会根据[TabBarIndicatorSize]确定指示器宽度大小 + /// 否则指示器的宽度为传入的值大小 + final double? indicatorWidth; + + /// 指示器边角的形状 + final TabBarIndicatorShape? indicatorBorder; + + final double? indicatorWeight; + final EdgeInsetsGeometry? indicatorPadding; + + const AssistantTabBar({ + Key? key, + required this.tabs, + this.controller, + this.border, + this.labelColor, + this.labelStyle, + this.unselectedLabelColor, + this.unselectedLabelStyle, + this.indicator, + this.indicatorColor, + this.indicatorSize, + this.indicatorBorder, + this.indicatorWidth, + this.indicatorWeight, + this.indicatorPadding, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + double indicatorWeight = this.indicatorWeight ?? 3.0; + double indicatorWidth = this.indicatorWidth ?? 20; + Color indicatorColor = this.indicatorColor ?? Theme.of(context).indicatorColor; + Decoration indicator = this.indicator ?? UnderlineTabIndicator( + borderSide: BorderSide( + width: indicatorWeight, + color: indicatorColor, + ), + border: indicatorBorder, + indicatorWidth: indicatorWidth + ); + return Theme( + data: ThemeData( + splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明 + highlightColor: Colors.transparent // 点击时的背景高亮颜色设置为透明 + ), + child: DecoratedBox( + decoration: border ?? DEFAULT_DECORATION, + child: TabBar( + tabs: tabs, + indicator: indicator, + controller: controller, + labelStyle: labelStyle ?? DEFAULT_LABEL_STYLE,// Tab选中字体样式 + labelColor: labelColor ?? AssistantColors.color_primary,// Tab选中字体颜色 + unselectedLabelColor: unselectedLabelColor ?? AssistantColors.color_666666,// Tab未选中字体颜色 + unselectedLabelStyle: unselectedLabelStyle ?? DEFAULT_UNSELECTED_LABEL_STYLE,// Tab未选中字体样式 + indicatorSize: indicatorSize ?? TabBarIndicatorSize.label,// 指示器宽度计算模式 + indicatorPadding: indicatorPadding ?? EdgeInsets.zero// 指示器内边距 + ) + ) + ); + } + +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart b/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart new file mode 100644 index 0000000000..14c49533a7 --- /dev/null +++ b/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart @@ -0,0 +1,25 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class AssistantTabBarView extends StatelessWidget { + final bool flex; + final List children; + final TabController? controller; + + const AssistantTabBarView({ + this.flex: true, + this.controller, + required this.children + }); + + @override + Widget build(BuildContext context) { + Widget child = TabBarView( + controller: controller, + children: children + ); + if (flex) child = Flexible(child: child); + return child; + } + +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart b/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart new file mode 100644 index 0000000000..54a2dc5340 --- /dev/null +++ b/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart @@ -0,0 +1,77 @@ +import 'tab_bar.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +enum TabBarIndicatorShape { + /// 圆角方形指示器 + round, + /// 方形指示器 + square +} + +/// 自定义TabBar指示器 +/// 该指示器实现了如下功能: +/// 1.支持指示器设置固定宽度 +/// 2.支持指示器设置为圆角矩形 +/// 该TabBar指示器类已作为默认指示器类应用于[AssistantTabBar] +class UnderlineTabIndicator extends Decoration { + /// TabBar指示器的宽度 + /// 传空则宽度根据原生指示器的规则计算宽度 + final double? indicatorWidth; + /// TabBar指示器的形状 + final TabBarIndicatorShape? border; + + const UnderlineTabIndicator({ + this.border, + this.indicatorWidth, + this.borderSide = const BorderSide( + width: 2.0, + color: Colors.white + ), + this.insets = EdgeInsets.zero, + + }); + + final BorderSide borderSide; + + final EdgeInsetsGeometry insets; + + @override + BoxPainter createBoxPainter([VoidCallback? onChanged]) { + return _UnderlinePainter(this, onChanged, border: border); + } + + Rect _indicatorRectFor(Rect rect, TextDirection textDirection) { + final Rect indicator = insets.resolve(textDirection).deflateRect(rect); + final isValid = indicatorWidth != null && indicatorWidth! < indicator.width; + final left = isValid ? indicator.left + indicatorWidth! : indicator.left; + final width = isValid ? indicatorWidth! : indicator.width; + return Rect.fromLTWH( + left, + indicator.bottom - borderSide.width, + width, + borderSide.width, + ); + } +} + +/// 自定义TabBar指示器画笔 +class _UnderlinePainter extends BoxPainter { + final UnderlineTabIndicator decoration; + + final TabBarIndicatorShape? border; + + _UnderlinePainter(this.decoration, VoidCallback? callback, {this.border}): super(callback); + + @override + void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) { + final Rect rect = offset & configuration.size!; + final TextDirection textDirection = configuration.textDirection!; + final Rect indicator = decoration._indicatorRectFor(rect, textDirection).deflate(decoration.borderSide.width / 2.0); + final TabBarIndicatorShape border = this.border ?? TabBarIndicatorShape.round; + final StrokeCap strokeCap = border == TabBarIndicatorShape.round ? StrokeCap.round : StrokeCap.square; + final Paint paint = decoration.borderSide.toPaint()..strokeCap = strokeCap; + canvas.drawLine(indicator.bottomLeft, indicator.bottomRight, paint); + } + +} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/pubspec.lock b/assistant-flutter/assistant_design/pubspec.lock new file mode 100644 index 0000000000..461592efab --- /dev/null +++ b/assistant-flutter/assistant_design/pubspec.lock @@ -0,0 +1,156 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.6.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_glide: + dependency: "direct main" + description: + path: "." + ref: "v1.0.6" + resolved-ref: "6f045a44093ac1079b6d20a0a1b85f036e8963f0" + url: "https://github.com/axen1314/flutter_glide.git" + source: git + version: "1.0.6" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.10" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.3.0" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" +sdks: + dart: ">=2.12.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/assistant-flutter/assistant_design/pubspec.yaml b/assistant-flutter/assistant_design/pubspec.yaml new file mode 100644 index 0000000000..4ae2d7e446 --- /dev/null +++ b/assistant-flutter/assistant_design/pubspec.yaml @@ -0,0 +1,57 @@ +name: assistant_design +description: 光环助手Flutter组件库. +publish_to: none +version: 0.0.1 + +environment: + sdk: ">=2.12.0 <3.0.0" + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + flutter_glide: + git: + url: 'https://github.com/axen1314/flutter_glide.git' + ref: 'v1.0.6' + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/assistant-flutter/assistant_design/test/assistant_design_test.dart b/assistant-flutter/assistant_design/test/assistant_design_test.dart new file mode 100644 index 0000000000..d30207dd4a --- /dev/null +++ b/assistant-flutter/assistant_design/test/assistant_design_test.dart @@ -0,0 +1,3 @@ + + +void main() {} diff --git a/assistant-flutter/lib/common/app.dart b/assistant-flutter/lib/common/app.dart new file mode 100644 index 0000000000..33d30bfc67 --- /dev/null +++ b/assistant-flutter/lib/common/app.dart @@ -0,0 +1,25 @@ +//@dart=2.9 +import 'routes.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_boost/flutter_boost.dart'; + +class AssistantApp extends StatefulWidget { + @override + State createState() => AssistantAppState(); +} + +class AssistantAppState extends State { + + Route _buildRoute(RouteSettings settings, String uniqueId) { + FlutterBoostRouteFactory func = routes[settings.name]; + return func?.call(settings, uniqueId); + } + + @override + Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); +} + +//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding +//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 +//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 +class AssistantFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} \ No newline at end of file diff --git a/assistant-flutter/lib/common/routes.dart b/assistant-flutter/lib/common/routes.dart new file mode 100644 index 0000000000..148f8f1991 --- /dev/null +++ b/assistant-flutter/lib/common/routes.dart @@ -0,0 +1,23 @@ +//@dart=2.9 +import 'package:flutter/cupertino.dart'; +import 'package:flutter_boost/flutter_boost.dart'; +import 'package:assistant/pages/feedback/feedback_page.dart'; + +const String FEED_BACK = "feedback"; + +Map get routes => { + "/": (settings, uniqueId) { + return PageRouteBuilder( + settings: settings, + pageBuilder: (_, __, ___) { + return FeedbackPage(); + }); + }, + FEED_BACK: (settings, uniqueId) { + return PageRouteBuilder( + settings: settings, + pageBuilder: (_, __, ___) { + return FeedbackPage(); + }); + } +}; \ No newline at end of file diff --git a/assistant-flutter/lib/main.dart b/assistant-flutter/lib/main.dart index 7d7c041eab..3f7e6e1a14 100644 --- a/assistant-flutter/lib/main.dart +++ b/assistant-flutter/lib/main.dart @@ -1,6 +1,5 @@ //@dart=2.9 -import 'package:assistant/common/assistant_app.dart'; -import 'package:assistant/common/assistant_binding.dart'; +import 'package:assistant/common/app.dart'; import 'package:flutter/material.dart'; void main() { diff --git a/assistant-flutter/lib/pages/feedback/feedback_page.dart b/assistant-flutter/lib/pages/feedback/feedback_page.dart index 3bbe35cc04..7bb8fbc6d1 100644 --- a/assistant-flutter/lib/pages/feedback/feedback_page.dart +++ b/assistant-flutter/lib/pages/feedback/feedback_page.dart @@ -1,15 +1,12 @@ -/** - * 帮助与反馈 - */ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:assistant/common/assistant_appbar.dart'; -import 'package:assistant/common/assistant_tabbar.dart'; -import 'package:assistant/common/assistant_tabbar_view.dart'; +import 'package:assistant_design/assistant_design.dart'; + import 'package:assistant/pages/feedback/fragments/help_fragment.dart'; import 'package:assistant/pages/feedback/fragments/suggest_fragment.dart'; +/// 帮助与反馈 class FeedbackPage extends StatefulWidget { @override State createState() => FeedbackPageState(); diff --git a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart index e88b57772b..82012fb711 100644 --- a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart +++ b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart @@ -1,4 +1,5 @@ -import 'package:assistant/common/assistant_search_bar.dart'; + +import 'package:assistant_design/assistant_design.dart'; import 'package:flutter/cupertino.dart'; class HelpFragment extends StatelessWidget { diff --git a/assistant-flutter/pubspec.lock b/assistant-flutter/pubspec.lock index 0eb6384723..2edf06b15f 100644 --- a/assistant-flutter/pubspec.lock +++ b/assistant-flutter/pubspec.lock @@ -1,6 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + assistant_design: + dependency: "direct main" + description: + path: assistant_design + relative: true + source: path + version: "0.0.1" async: dependency: transitive description: @@ -72,7 +79,7 @@ packages: source: git version: "3.0.0" flutter_glide: - dependency: "direct main" + dependency: transitive description: path: "." ref: "v1.0.6" diff --git a/assistant-flutter/pubspec.yaml b/assistant-flutter/pubspec.yaml index aeedf7866c..c10fd292bb 100644 --- a/assistant-flutter/pubspec.yaml +++ b/assistant-flutter/pubspec.yaml @@ -28,10 +28,9 @@ dependencies: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: 'v3.0-preview.9' - flutter_glide: - git: - url: 'https://github.com/axen1314/flutter_glide.git' - ref: 'v1.0.6' + assistant_design: + path: 'assistant_design' + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/assistant-flutter/settings.gradle b/assistant-flutter/settings.gradle index c77f6171db..782a885096 100644 --- a/assistant-flutter/settings.gradle +++ b/assistant-flutter/settings.gradle @@ -1,3 +1,2 @@ - -// Generated file. Do not edit. -include ':.android' +include ':android' +project(":android").projectDir = new File(settingsDir, ".android") diff --git a/assistant-flutter/test/widget_test.dart b/assistant-flutter/test/widget_test.dart index 1f38f29004..4bdb38d844 100644 --- a/assistant-flutter/test/widget_test.dart +++ b/assistant-flutter/test/widget_test.dart @@ -6,13 +6,11 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. -import 'package:assistant/common/assistant_app.dart'; +import 'package:assistant/common/app.dart'; import 'package:flutter/material.dart'; import 'package:assistant/pages/feedback/feedback_page.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:assistant/main.dart'; - void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. From 82656a71872df71086aa6908ce052d6e28e1ecd0 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 17 Aug 2021 09:57:20 +0800 Subject: [PATCH 06/89] =?UTF-8?q?Deleted=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 4 +- .../lib/common/assistant_app.dart | 20 ---- .../lib/common/assistant_appbar.dart | 113 ------------------ .../lib/common/assistant_binding.dart | 8 -- .../lib/common/assistant_colors.dart | 10 -- .../lib/common/assistant_routes.dart | 23 ---- .../lib/common/assistant_search_bar.dart | 25 ---- .../lib/common/assistant_tab_indicator.dart | 80 ------------- .../lib/common/assistant_tabbar.dart | 106 ---------------- .../lib/common/assistant_tabbar_view.dart | 25 ---- 10 files changed, 2 insertions(+), 412 deletions(-) delete mode 100644 assistant-flutter/lib/common/assistant_app.dart delete mode 100644 assistant-flutter/lib/common/assistant_appbar.dart delete mode 100644 assistant-flutter/lib/common/assistant_binding.dart delete mode 100644 assistant-flutter/lib/common/assistant_colors.dart delete mode 100644 assistant-flutter/lib/common/assistant_routes.dart delete mode 100644 assistant-flutter/lib/common/assistant_search_bar.dart delete mode 100644 assistant-flutter/lib/common/assistant_tab_indicator.dart delete mode 100644 assistant-flutter/lib/common/assistant_tabbar.dart delete mode 100644 assistant-flutter/lib/common/assistant_tabbar_view.dart diff --git a/.gitmodules b/.gitmodules index 31e8bdf1c6..b7b3016877 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,7 +2,7 @@ path = libraries/LGLibrary url = git@git.ghzs.com:android/common-library.git branch = master -[submodule "flutter-module"] - path = flutter-module +[submodule "assistant-flutter"] + path = assistant-flutter url = git@git.ghzs.com:halo/android/flutter-module.git branch = dev diff --git a/assistant-flutter/lib/common/assistant_app.dart b/assistant-flutter/lib/common/assistant_app.dart deleted file mode 100644 index 9948af5a51..0000000000 --- a/assistant-flutter/lib/common/assistant_app.dart +++ /dev/null @@ -1,20 +0,0 @@ -//@dart=2.9 -import 'package:assistant/common/assistant_routes.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_boost/flutter_boost.dart'; - -class AssistantApp extends StatefulWidget { - @override - State createState() => AssistantAppState(); -} - -class AssistantAppState extends State { - - Route _buildRoute(RouteSettings settings, String uniqueId) { - FlutterBoostRouteFactory func = routes[settings.name]; - return func?.call(settings, uniqueId); - } - - @override - Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_appbar.dart b/assistant-flutter/lib/common/assistant_appbar.dart deleted file mode 100644 index 98c803eb4b..0000000000 --- a/assistant-flutter/lib/common/assistant_appbar.dart +++ /dev/null @@ -1,113 +0,0 @@ - -import 'package:flutter/cupertino.dart' hide ImageProvider; -import 'package:flutter/material.dart' hide ImageProvider; -import 'package:flutter_glide/flutter_glide.dart'; - -class AssistantAppBar extends StatelessWidget implements PreferredSizeWidget { - static const double APP_BAR_SIZE = 48; - static const String DEFAULT_NAVIGATION_ICON = "R.drawable.ic_bar_back"; - - // 标题栏 - final String title;// 标题文案 - final double? titleSize;// 标题字体大小 - final Color? titleColor;// 标题字体颜色 - final TextStyle? titleStyle;// 标题字体样式 - final Widget? titleWidget;// 自定义标题控件 - - // 导航按钮 - final ImageProvider? navigationIcon;// 导航按钮图标 - final double? navigationMarginStart;// 导航按钮左间隔 - final double? navigationIconWidth;// 导航按钮宽度 - final double? navigationIconHeight;// 导航按钮高度 - final Widget? navigationWidget;// 自定导航按钮控件 - final VoidCallback? onNavigationPressed;// 导航按钮点击事件 - - // 菜单栏 - final Widget? menuWidget; // 自定义菜单控件 - final double? menuMarginEnd; // 菜单右间隔 - final VoidCallback? onMenuPressed;// 菜单点击事件 - - - - const AssistantAppBar({ - Key? key, - required this.title, - this.titleSize, - this.titleColor, - this.titleStyle, - this.titleWidget, - this.navigationWidget, - this.navigationIcon, - this.onNavigationPressed, - this.navigationIconWidth, - this.navigationIconHeight, - this.navigationMarginStart, - this.menuWidget, - this.menuMarginEnd, - this.onMenuPressed, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - // 导航栏 - Widget navigationWidget = this.navigationWidget ?? - Glide( - navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), - width: navigationIconWidth ?? 24, - height: navigationIconHeight ?? 24 - ); - if (onNavigationPressed != null) - navigationWidget = IconButton( - onPressed: onNavigationPressed, - icon: navigationWidget, - splashRadius: 21, - ); - navigationWidget = Positioned( - left: navigationMarginStart??0, - child: navigationWidget - ); - - // 标题栏 - TextStyle? appBarTextStyle = AppBarTheme.of(context).titleTextStyle; - Widget titleWidget = this.titleWidget ?? Text( - this.title, - style: this.titleStyle??TextStyle( - color: this.titleColor??Colors.black, - fontSize: this.titleSize??15, - fontWeight: FontWeight.bold, - fontFamily: appBarTextStyle?.fontFamily - ), - ); - - // 菜单栏 - Widget menuWidget = Container(); - if (this.menuWidget != null) { - menuWidget = Positioned( - right: this.menuMarginEnd??15, - child: this.onMenuPressed != null ? GestureDetector( - onTap: this.onMenuPressed, - child: this.menuWidget - ) : this.menuWidget! - ); - } - - return SafeArea( - child: Container( - height: APP_BAR_SIZE, - alignment: Alignment.center, - child: Stack( - alignment: Alignment.center, - children: [ - navigationWidget, - titleWidget, - menuWidget - ], - ) - ) - ); - } - - @override - Size get preferredSize => Size.fromHeight(APP_BAR_SIZE); - -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_binding.dart b/assistant-flutter/lib/common/assistant_binding.dart deleted file mode 100644 index c2362e338b..0000000000 --- a/assistant-flutter/lib/common/assistant_binding.dart +++ /dev/null @@ -1,8 +0,0 @@ -//@dart=2.9 -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:flutter/material.dart'; - -//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding -//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 -//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 -class AssistantFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_colors.dart b/assistant-flutter/lib/common/assistant_colors.dart deleted file mode 100644 index 5136e2caa7..0000000000 --- a/assistant-flutter/lib/common/assistant_colors.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class AssistantColors { - AssistantColors._(); - - static const color_primary = const Color(0xFF1383EB); - - static const color_666666 = const Color(0xFF666666); - static const color_eeeeee = const Color(0xFFEEEEEE); -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_routes.dart b/assistant-flutter/lib/common/assistant_routes.dart deleted file mode 100644 index 148f8f1991..0000000000 --- a/assistant-flutter/lib/common/assistant_routes.dart +++ /dev/null @@ -1,23 +0,0 @@ -//@dart=2.9 -import 'package:flutter/cupertino.dart'; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:assistant/pages/feedback/feedback_page.dart'; - -const String FEED_BACK = "feedback"; - -Map get routes => { - "/": (settings, uniqueId) { - return PageRouteBuilder( - settings: settings, - pageBuilder: (_, __, ___) { - return FeedbackPage(); - }); - }, - FEED_BACK: (settings, uniqueId) { - return PageRouteBuilder( - settings: settings, - pageBuilder: (_, __, ___) { - return FeedbackPage(); - }); - } -}; \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_search_bar.dart b/assistant-flutter/lib/common/assistant_search_bar.dart deleted file mode 100644 index 746f28683b..0000000000 --- a/assistant-flutter/lib/common/assistant_search_bar.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class AssistantSearchBar extends StatelessWidget { - final TextEditingController? controller; - - const AssistantSearchBar({this.controller}) : super(); - - @override - Widget build(BuildContext context) => Container( - child: Row( - children: [ - Flexible( - child: TextField( - controller: controller, - decoration: const InputDecoration( - hintText: "请输入关键词搜索", - ), - ) - ) - ], - ), - ); - -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_tab_indicator.dart b/assistant-flutter/lib/common/assistant_tab_indicator.dart deleted file mode 100644 index 297a7a05ee..0000000000 --- a/assistant-flutter/lib/common/assistant_tab_indicator.dart +++ /dev/null @@ -1,80 +0,0 @@ -/** - * 自定义TabIndicator - */ -import 'package:assistant/common/assistant_tabbar.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -enum TabBarIndicatorShape { - /// 圆角方形指示器 - round, - /// 方形指示器 - square -} - -/// 自定义TabBar指示器 -/// 该指示器实现了如下功能: -/// 1.支持指示器设置固定宽度 -/// 2.支持指示器设置为圆角矩形 -/// 该TabBar指示器类已作为默认指示器类应用于[AssistantTabBar] -class UnderlineTabIndicator extends Decoration { - /// TabBar指示器的宽度 - /// 传空则宽度根据原生指示器的规则计算宽度 - final double? indicatorWidth; - /// TabBar指示器的形状 - final TabBarIndicatorShape? border; - - const UnderlineTabIndicator({ - this.border, - this.indicatorWidth, - this.borderSide = const BorderSide( - width: 2.0, - color: Colors.white - ), - this.insets = EdgeInsets.zero, - - }); - - final BorderSide borderSide; - - final EdgeInsetsGeometry insets; - - @override - BoxPainter createBoxPainter([VoidCallback? onChanged]) { - return _UnderlinePainter(this, onChanged, border: border); - } - - Rect _indicatorRectFor(Rect rect, TextDirection textDirection) { - final Rect indicator = insets.resolve(textDirection).deflateRect(rect); - final isValid = indicatorWidth != null && indicatorWidth! < indicator.width; - final left = isValid ? indicator.left + indicatorWidth! : indicator.left; - final width = isValid ? indicatorWidth! : indicator.width; - return Rect.fromLTWH( - left, - indicator.bottom - borderSide.width, - width, - borderSide.width, - ); - } -} - -/// 自定义TabBar指示器画笔 -class _UnderlinePainter extends BoxPainter { - final UnderlineTabIndicator decoration; - - final TabBarIndicatorShape? border; - - _UnderlinePainter(this.decoration, VoidCallback? callback, {this.border}): super(callback); - - @override - void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) { - final Rect rect = offset & configuration.size!; - final TextDirection textDirection = configuration.textDirection!; - final Rect indicator = decoration._indicatorRectFor(rect, textDirection).deflate(decoration.borderSide.width / 2.0); - final TabBarIndicatorShape border = this.border ?? TabBarIndicatorShape.round; - final StrokeCap strokeCap = border == TabBarIndicatorShape.round ? StrokeCap.round : StrokeCap.square; - final Paint paint = decoration.borderSide.toPaint()..strokeCap = strokeCap; - canvas.drawLine(indicator.bottomLeft, indicator.bottomRight, paint); - } - -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_tabbar.dart b/assistant-flutter/lib/common/assistant_tabbar.dart deleted file mode 100644 index 9f2e963948..0000000000 --- a/assistant-flutter/lib/common/assistant_tabbar.dart +++ /dev/null @@ -1,106 +0,0 @@ -/** - * 通用TabBar封装 - * 在原生TabBar基础上加入Halo的设计风格 - */ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart' hide UnderlineTabIndicator; -import 'package:assistant/common/assistant_colors.dart'; -import 'package:assistant/common/assistant_tab_indicator.dart'; - -class AssistantTabBar extends StatelessWidget { - - static const DEFAULT_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.bold - ); - - static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.normal - ); - - static const DEFAULT_DECORATION = const BoxDecoration( - border: const Border( - bottom: const BorderSide( - width: 1.0, - color: AssistantColors.color_eeeeee - ) - ) - ); - - final List tabs; - final TabController? controller; - final Color? labelColor; - final TextStyle? labelStyle; - final Color? unselectedLabelColor; - final TextStyle? unselectedLabelStyle; - final Decoration? indicator; - final TabBarIndicatorSize? indicatorSize; - final Color? indicatorColor; - - /// TabBar的边距 - final Decoration? border; - - /// 指示器的宽度 - /// 默认情况下为空,则会根据[TabBarIndicatorSize]确定指示器宽度大小 - /// 否则指示器的宽度为传入的值大小 - final double? indicatorWidth; - - /// 指示器边角的形状 - final TabBarIndicatorShape? indicatorBorder; - - final double? indicatorWeight; - final EdgeInsetsGeometry? indicatorPadding; - - const AssistantTabBar({ - Key? key, - required this.tabs, - this.controller, - this.border, - this.labelColor, - this.labelStyle, - this.unselectedLabelColor, - this.unselectedLabelStyle, - this.indicator, - this.indicatorColor, - this.indicatorSize, - this.indicatorBorder, - this.indicatorWidth, - this.indicatorWeight, - this.indicatorPadding, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - double indicatorWeight = this.indicatorWeight ?? 3.0; - double indicatorWidth = this.indicatorWidth ?? 20; - Color indicatorColor = this.indicatorColor ?? Theme.of(context).indicatorColor; - Decoration indicator = this.indicator ?? UnderlineTabIndicator( - borderSide: BorderSide( - width: indicatorWeight, - color: indicatorColor, - ), - border: indicatorBorder, - indicatorWidth: indicatorWidth - ); - return Theme( - data: ThemeData( - splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明 - highlightColor: Colors.transparent // 点击时的背景高亮颜色设置为透明 - ), - child: DecoratedBox( - decoration: border ?? DEFAULT_DECORATION, - child: TabBar( - tabs: tabs, - indicator: indicator, - controller: controller, - labelStyle: labelStyle ?? DEFAULT_LABEL_STYLE,// Tab选中字体样式 - labelColor: labelColor ?? AssistantColors.color_primary,// Tab选中字体颜色 - unselectedLabelColor: unselectedLabelColor ?? AssistantColors.color_666666,// Tab未选中字体颜色 - unselectedLabelStyle: unselectedLabelStyle ?? DEFAULT_UNSELECTED_LABEL_STYLE,// Tab未选中字体样式 - indicatorSize: indicatorSize ?? TabBarIndicatorSize.label,// 指示器宽度计算模式 - indicatorPadding: indicatorPadding ?? EdgeInsets.zero// 指示器内边距 - ) - ) - ); - } - -} \ No newline at end of file diff --git a/assistant-flutter/lib/common/assistant_tabbar_view.dart b/assistant-flutter/lib/common/assistant_tabbar_view.dart deleted file mode 100644 index 14c49533a7..0000000000 --- a/assistant-flutter/lib/common/assistant_tabbar_view.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class AssistantTabBarView extends StatelessWidget { - final bool flex; - final List children; - final TabController? controller; - - const AssistantTabBarView({ - this.flex: true, - this.controller, - required this.children - }); - - @override - Widget build(BuildContext context) { - Widget child = TabBarView( - controller: controller, - children: children - ); - if (flex) child = Flexible(child: child); - return child; - } - -} \ No newline at end of file From f7b155d3b4d2347c30145f8325c315d5823f95a2 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 17 Aug 2021 10:36:14 +0800 Subject: [PATCH 07/89] =?UTF-8?q?Fixed=20=E4=BF=AE=E5=A4=8D=E4=B8=80?= =?UTF-8?q?=E4=BA=9BBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 5 +- assistant-flutter/.gitignore | 53 ------ assistant-flutter/.metadata | 10 - assistant-flutter/README.md | 11 -- assistant-flutter/assistant_design/.gitignore | 75 -------- assistant-flutter/assistant_design/.metadata | 10 - .../assistant_design/CHANGELOG.md | 3 - assistant-flutter/assistant_design/LICENSE | 1 - assistant-flutter/assistant_design/README.md | 14 -- .../lib/assistant_design.dart | 11 -- .../assistant_design/lib/colors.dart | 10 - .../assistant_design/lib/widgets/app_bar.dart | 113 ----------- .../lib/widgets/search_bar.dart | 30 --- .../assistant_design/lib/widgets/tab_bar.dart | 104 ---------- .../lib/widgets/tab_bar_view.dart | 25 --- .../lib/widgets/tab_indicator.dart | 77 -------- .../assistant_design/pubspec.lock | 156 --------------- .../assistant_design/pubspec.yaml | 57 ------ .../test/assistant_design_test.dart | 3 - assistant-flutter/lib/common/app.dart | 25 --- assistant-flutter/lib/common/routes.dart | 23 --- assistant-flutter/lib/main.dart | 12 -- .../lib/pages/feedback/feedback_page.dart | 64 ------- .../feedback/fragments/help_fragment.dart | 16 -- .../feedback/fragments/suggest_fragment.dart | 12 -- assistant-flutter/pubspec.lock | 179 ------------------ assistant-flutter/pubspec.yaml | 94 --------- assistant-flutter/settings.gradle | 2 - assistant-flutter/test/widget_test.dart | 35 ---- assistant_flutter | 1 + settings.gradle | 2 +- 31 files changed, 4 insertions(+), 1229 deletions(-) delete mode 100644 assistant-flutter/.gitignore delete mode 100644 assistant-flutter/.metadata delete mode 100644 assistant-flutter/README.md delete mode 100644 assistant-flutter/assistant_design/.gitignore delete mode 100644 assistant-flutter/assistant_design/.metadata delete mode 100644 assistant-flutter/assistant_design/CHANGELOG.md delete mode 100644 assistant-flutter/assistant_design/LICENSE delete mode 100644 assistant-flutter/assistant_design/README.md delete mode 100644 assistant-flutter/assistant_design/lib/assistant_design.dart delete mode 100644 assistant-flutter/assistant_design/lib/colors.dart delete mode 100644 assistant-flutter/assistant_design/lib/widgets/app_bar.dart delete mode 100644 assistant-flutter/assistant_design/lib/widgets/search_bar.dart delete mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_bar.dart delete mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart delete mode 100644 assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart delete mode 100644 assistant-flutter/assistant_design/pubspec.lock delete mode 100644 assistant-flutter/assistant_design/pubspec.yaml delete mode 100644 assistant-flutter/assistant_design/test/assistant_design_test.dart delete mode 100644 assistant-flutter/lib/common/app.dart delete mode 100644 assistant-flutter/lib/common/routes.dart delete mode 100644 assistant-flutter/lib/main.dart delete mode 100644 assistant-flutter/lib/pages/feedback/feedback_page.dart delete mode 100644 assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart delete mode 100644 assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart delete mode 100644 assistant-flutter/pubspec.lock delete mode 100644 assistant-flutter/pubspec.yaml delete mode 100644 assistant-flutter/settings.gradle delete mode 100644 assistant-flutter/test/widget_test.dart create mode 160000 assistant_flutter diff --git a/.gitmodules b/.gitmodules index b7b3016877..b7106566b4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,7 +2,6 @@ path = libraries/LGLibrary url = git@git.ghzs.com:android/common-library.git branch = master -[submodule "assistant-flutter"] - path = assistant-flutter +[submodule "assistant_flutter"] + path = assistant_flutter url = git@git.ghzs.com:halo/android/flutter-module.git - branch = dev diff --git a/assistant-flutter/.gitignore b/assistant-flutter/.gitignore deleted file mode 100644 index 1299e9ac15..0000000000 --- a/assistant-flutter/.gitignore +++ /dev/null @@ -1,53 +0,0 @@ -.DS_Store -.dart_tool/ - -.packages -.pub/ -.gradle - -.idea/ -.vagrant/ -.sconsign.dblite -.svn/ - -*.swp -profile - -DerivedData/ - -.generated/ - -*.pbxuser -*.mode1v3 -*.mode2v3 -*.perspectivev3 - -!default.pbxuser -!default.mode1v3 -!default.mode2v3 -!default.perspectivev3 - -xcuserdata - -*.moved-aside - -*.pyc -*sync/ -Icon? -.tags* - -build/ -.android/ -.ios/ -.flutter-plugins -.flutter-plugins-dependencies - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json -/gradlew -/gradlew.bat -/local.properties -/gradle/ diff --git a/assistant-flutter/.metadata b/assistant-flutter/.metadata deleted file mode 100644 index df0e1310c9..0000000000 --- a/assistant-flutter/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 02c026b03cd31dd3f867e5faeb7e104cce174c5f - channel: unknown - -project_type: module diff --git a/assistant-flutter/README.md b/assistant-flutter/README.md deleted file mode 100644 index 4cd7e0dcc8..0000000000 --- a/assistant-flutter/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# flutter_module - -The Assistant Flutter moudle. - -## Getting Started - -For help getting started with Flutter, view our online -[documentation](https://flutter.dev/). - -For instructions integrating Flutter modules to your existing applications, -see the [add-to-app documentation](https://flutter.dev/docs/development/add-to-app). diff --git a/assistant-flutter/assistant_design/.gitignore b/assistant-flutter/assistant_design/.gitignore deleted file mode 100644 index a247422ef7..0000000000 --- a/assistant-flutter/assistant_design/.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/ephemeral -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 diff --git a/assistant-flutter/assistant_design/.metadata b/assistant-flutter/assistant_design/.metadata deleted file mode 100644 index ecb604572c..0000000000 --- a/assistant-flutter/assistant_design/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 02c026b03cd31dd3f867e5faeb7e104cce174c5f - channel: unknown - -project_type: package diff --git a/assistant-flutter/assistant_design/CHANGELOG.md b/assistant-flutter/assistant_design/CHANGELOG.md deleted file mode 100644 index 41cc7d8192..0000000000 --- a/assistant-flutter/assistant_design/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* TODO: Describe initial release. diff --git a/assistant-flutter/assistant_design/LICENSE b/assistant-flutter/assistant_design/LICENSE deleted file mode 100644 index ba75c69f7f..0000000000 --- a/assistant-flutter/assistant_design/LICENSE +++ /dev/null @@ -1 +0,0 @@ -TODO: Add your license here. diff --git a/assistant-flutter/assistant_design/README.md b/assistant-flutter/assistant_design/README.md deleted file mode 100644 index 33efbe4417..0000000000 --- a/assistant-flutter/assistant_design/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# assistant_design - -光环助手Flutter组件库. - -## Getting Started - -This project is a starting point for a Dart -[package](https://flutter.dev/developing-packages/), -a library module containing code that can be shared easily across -multiple Flutter or Dart projects. - -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/assistant-flutter/assistant_design/lib/assistant_design.dart b/assistant-flutter/assistant_design/lib/assistant_design.dart deleted file mode 100644 index 7901311723..0000000000 --- a/assistant-flutter/assistant_design/lib/assistant_design.dart +++ /dev/null @@ -1,11 +0,0 @@ -library assistant_design; - -export 'colors.dart'; -export 'widgets/app_bar.dart'; -export 'widgets/search_bar.dart'; -export 'widgets/tab_bar.dart'; -export 'widgets/tab_bar_view.dart'; -export 'widgets/tab_indicator.dart'; - - - diff --git a/assistant-flutter/assistant_design/lib/colors.dart b/assistant-flutter/assistant_design/lib/colors.dart deleted file mode 100644 index 5136e2caa7..0000000000 --- a/assistant-flutter/assistant_design/lib/colors.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class AssistantColors { - AssistantColors._(); - - static const color_primary = const Color(0xFF1383EB); - - static const color_666666 = const Color(0xFF666666); - static const color_eeeeee = const Color(0xFFEEEEEE); -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/app_bar.dart b/assistant-flutter/assistant_design/lib/widgets/app_bar.dart deleted file mode 100644 index 98c803eb4b..0000000000 --- a/assistant-flutter/assistant_design/lib/widgets/app_bar.dart +++ /dev/null @@ -1,113 +0,0 @@ - -import 'package:flutter/cupertino.dart' hide ImageProvider; -import 'package:flutter/material.dart' hide ImageProvider; -import 'package:flutter_glide/flutter_glide.dart'; - -class AssistantAppBar extends StatelessWidget implements PreferredSizeWidget { - static const double APP_BAR_SIZE = 48; - static const String DEFAULT_NAVIGATION_ICON = "R.drawable.ic_bar_back"; - - // 标题栏 - final String title;// 标题文案 - final double? titleSize;// 标题字体大小 - final Color? titleColor;// 标题字体颜色 - final TextStyle? titleStyle;// 标题字体样式 - final Widget? titleWidget;// 自定义标题控件 - - // 导航按钮 - final ImageProvider? navigationIcon;// 导航按钮图标 - final double? navigationMarginStart;// 导航按钮左间隔 - final double? navigationIconWidth;// 导航按钮宽度 - final double? navigationIconHeight;// 导航按钮高度 - final Widget? navigationWidget;// 自定导航按钮控件 - final VoidCallback? onNavigationPressed;// 导航按钮点击事件 - - // 菜单栏 - final Widget? menuWidget; // 自定义菜单控件 - final double? menuMarginEnd; // 菜单右间隔 - final VoidCallback? onMenuPressed;// 菜单点击事件 - - - - const AssistantAppBar({ - Key? key, - required this.title, - this.titleSize, - this.titleColor, - this.titleStyle, - this.titleWidget, - this.navigationWidget, - this.navigationIcon, - this.onNavigationPressed, - this.navigationIconWidth, - this.navigationIconHeight, - this.navigationMarginStart, - this.menuWidget, - this.menuMarginEnd, - this.onMenuPressed, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - // 导航栏 - Widget navigationWidget = this.navigationWidget ?? - Glide( - navigationIcon ?? const DrawableImageProvider(DEFAULT_NAVIGATION_ICON), - width: navigationIconWidth ?? 24, - height: navigationIconHeight ?? 24 - ); - if (onNavigationPressed != null) - navigationWidget = IconButton( - onPressed: onNavigationPressed, - icon: navigationWidget, - splashRadius: 21, - ); - navigationWidget = Positioned( - left: navigationMarginStart??0, - child: navigationWidget - ); - - // 标题栏 - TextStyle? appBarTextStyle = AppBarTheme.of(context).titleTextStyle; - Widget titleWidget = this.titleWidget ?? Text( - this.title, - style: this.titleStyle??TextStyle( - color: this.titleColor??Colors.black, - fontSize: this.titleSize??15, - fontWeight: FontWeight.bold, - fontFamily: appBarTextStyle?.fontFamily - ), - ); - - // 菜单栏 - Widget menuWidget = Container(); - if (this.menuWidget != null) { - menuWidget = Positioned( - right: this.menuMarginEnd??15, - child: this.onMenuPressed != null ? GestureDetector( - onTap: this.onMenuPressed, - child: this.menuWidget - ) : this.menuWidget! - ); - } - - return SafeArea( - child: Container( - height: APP_BAR_SIZE, - alignment: Alignment.center, - child: Stack( - alignment: Alignment.center, - children: [ - navigationWidget, - titleWidget, - menuWidget - ], - ) - ) - ); - } - - @override - Size get preferredSize => Size.fromHeight(APP_BAR_SIZE); - -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/search_bar.dart b/assistant-flutter/assistant_design/lib/widgets/search_bar.dart deleted file mode 100644 index fb49f5932e..0000000000 --- a/assistant-flutter/assistant_design/lib/widgets/search_bar.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class AssistantSearchBar extends StatelessWidget { - final TextEditingController? controller; - - const AssistantSearchBar({this.controller}) : super(); - - @override - Widget build(BuildContext context) => Container( - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Flexible( - child: TextField( - controller: controller, - decoration: const InputDecoration( - hintText: "请输入关键词搜索", - ), - ) - ), - TextButton( - onPressed: () {}, - child: Text("搜索") - ) - ], - ), - ); - -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart b/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart deleted file mode 100644 index ca35ca2ca7..0000000000 --- a/assistant-flutter/assistant_design/lib/widgets/tab_bar.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:assistant_design/colors.dart'; -import 'tab_indicator.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart' hide UnderlineTabIndicator; - -/// 通用TabBar封装 -/// 在原生TabBar基础上加入Halo的设计风格 -class AssistantTabBar extends StatelessWidget { - - static const DEFAULT_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.bold - ); - - static const DEFAULT_UNSELECTED_LABEL_STYLE = const TextStyle( - fontWeight: FontWeight.normal - ); - - static const DEFAULT_DECORATION = const BoxDecoration( - border: const Border( - bottom: const BorderSide( - width: 1.0, - color: AssistantColors.color_eeeeee - ) - ) - ); - - final List tabs; - final TabController? controller; - final Color? labelColor; - final TextStyle? labelStyle; - final Color? unselectedLabelColor; - final TextStyle? unselectedLabelStyle; - final Decoration? indicator; - final TabBarIndicatorSize? indicatorSize; - final Color? indicatorColor; - - /// TabBar的边距 - final Decoration? border; - - /// 指示器的宽度 - /// 默认情况下为空,则会根据[TabBarIndicatorSize]确定指示器宽度大小 - /// 否则指示器的宽度为传入的值大小 - final double? indicatorWidth; - - /// 指示器边角的形状 - final TabBarIndicatorShape? indicatorBorder; - - final double? indicatorWeight; - final EdgeInsetsGeometry? indicatorPadding; - - const AssistantTabBar({ - Key? key, - required this.tabs, - this.controller, - this.border, - this.labelColor, - this.labelStyle, - this.unselectedLabelColor, - this.unselectedLabelStyle, - this.indicator, - this.indicatorColor, - this.indicatorSize, - this.indicatorBorder, - this.indicatorWidth, - this.indicatorWeight, - this.indicatorPadding, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - double indicatorWeight = this.indicatorWeight ?? 3.0; - double indicatorWidth = this.indicatorWidth ?? 20; - Color indicatorColor = this.indicatorColor ?? Theme.of(context).indicatorColor; - Decoration indicator = this.indicator ?? UnderlineTabIndicator( - borderSide: BorderSide( - width: indicatorWeight, - color: indicatorColor, - ), - border: indicatorBorder, - indicatorWidth: indicatorWidth - ); - return Theme( - data: ThemeData( - splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明 - highlightColor: Colors.transparent // 点击时的背景高亮颜色设置为透明 - ), - child: DecoratedBox( - decoration: border ?? DEFAULT_DECORATION, - child: TabBar( - tabs: tabs, - indicator: indicator, - controller: controller, - labelStyle: labelStyle ?? DEFAULT_LABEL_STYLE,// Tab选中字体样式 - labelColor: labelColor ?? AssistantColors.color_primary,// Tab选中字体颜色 - unselectedLabelColor: unselectedLabelColor ?? AssistantColors.color_666666,// Tab未选中字体颜色 - unselectedLabelStyle: unselectedLabelStyle ?? DEFAULT_UNSELECTED_LABEL_STYLE,// Tab未选中字体样式 - indicatorSize: indicatorSize ?? TabBarIndicatorSize.label,// 指示器宽度计算模式 - indicatorPadding: indicatorPadding ?? EdgeInsets.zero// 指示器内边距 - ) - ) - ); - } - -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart b/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart deleted file mode 100644 index 14c49533a7..0000000000 --- a/assistant-flutter/assistant_design/lib/widgets/tab_bar_view.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class AssistantTabBarView extends StatelessWidget { - final bool flex; - final List children; - final TabController? controller; - - const AssistantTabBarView({ - this.flex: true, - this.controller, - required this.children - }); - - @override - Widget build(BuildContext context) { - Widget child = TabBarView( - controller: controller, - children: children - ); - if (flex) child = Flexible(child: child); - return child; - } - -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart b/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart deleted file mode 100644 index 54a2dc5340..0000000000 --- a/assistant-flutter/assistant_design/lib/widgets/tab_indicator.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'tab_bar.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -enum TabBarIndicatorShape { - /// 圆角方形指示器 - round, - /// 方形指示器 - square -} - -/// 自定义TabBar指示器 -/// 该指示器实现了如下功能: -/// 1.支持指示器设置固定宽度 -/// 2.支持指示器设置为圆角矩形 -/// 该TabBar指示器类已作为默认指示器类应用于[AssistantTabBar] -class UnderlineTabIndicator extends Decoration { - /// TabBar指示器的宽度 - /// 传空则宽度根据原生指示器的规则计算宽度 - final double? indicatorWidth; - /// TabBar指示器的形状 - final TabBarIndicatorShape? border; - - const UnderlineTabIndicator({ - this.border, - this.indicatorWidth, - this.borderSide = const BorderSide( - width: 2.0, - color: Colors.white - ), - this.insets = EdgeInsets.zero, - - }); - - final BorderSide borderSide; - - final EdgeInsetsGeometry insets; - - @override - BoxPainter createBoxPainter([VoidCallback? onChanged]) { - return _UnderlinePainter(this, onChanged, border: border); - } - - Rect _indicatorRectFor(Rect rect, TextDirection textDirection) { - final Rect indicator = insets.resolve(textDirection).deflateRect(rect); - final isValid = indicatorWidth != null && indicatorWidth! < indicator.width; - final left = isValid ? indicator.left + indicatorWidth! : indicator.left; - final width = isValid ? indicatorWidth! : indicator.width; - return Rect.fromLTWH( - left, - indicator.bottom - borderSide.width, - width, - borderSide.width, - ); - } -} - -/// 自定义TabBar指示器画笔 -class _UnderlinePainter extends BoxPainter { - final UnderlineTabIndicator decoration; - - final TabBarIndicatorShape? border; - - _UnderlinePainter(this.decoration, VoidCallback? callback, {this.border}): super(callback); - - @override - void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) { - final Rect rect = offset & configuration.size!; - final TextDirection textDirection = configuration.textDirection!; - final Rect indicator = decoration._indicatorRectFor(rect, textDirection).deflate(decoration.borderSide.width / 2.0); - final TabBarIndicatorShape border = this.border ?? TabBarIndicatorShape.round; - final StrokeCap strokeCap = border == TabBarIndicatorShape.round ? StrokeCap.round : StrokeCap.square; - final Paint paint = decoration.borderSide.toPaint()..strokeCap = strokeCap; - canvas.drawLine(indicator.bottomLeft, indicator.bottomRight, paint); - } - -} \ No newline at end of file diff --git a/assistant-flutter/assistant_design/pubspec.lock b/assistant-flutter/assistant_design/pubspec.lock deleted file mode 100644 index 461592efab..0000000000 --- a/assistant-flutter/assistant_design/pubspec.lock +++ /dev/null @@ -1,156 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.6.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" - characters: - dependency: transitive - description: - name: characters - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - clock: - dependency: transitive - description: - name: clock - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - collection: - dependency: transitive - description: - name: collection - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.15.0" - fake_async: - dependency: transitive - description: - name: fake_async - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_glide: - dependency: "direct main" - description: - path: "." - ref: "v1.0.6" - resolved-ref: "6f045a44093ac1079b6d20a0a1b85f036e8963f0" - url: "https://github.com/axen1314/flutter_glide.git" - source: git - version: "1.0.6" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - matcher: - dependency: transitive - description: - name: matcher - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.12.10" - meta: - dependency: transitive - description: - name: meta - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.0" - path: - dependency: transitive - description: - name: path - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.8.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.8.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.10.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - test_api: - dependency: transitive - description: - name: test_api - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.3.0" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.0" - vector_math: - dependency: transitive - description: - name: vector_math - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" -sdks: - dart: ">=2.12.0 <3.0.0" - flutter: ">=1.20.0" diff --git a/assistant-flutter/assistant_design/pubspec.yaml b/assistant-flutter/assistant_design/pubspec.yaml deleted file mode 100644 index 4ae2d7e446..0000000000 --- a/assistant-flutter/assistant_design/pubspec.yaml +++ /dev/null @@ -1,57 +0,0 @@ -name: assistant_design -description: 光环助手Flutter组件库. -publish_to: none -version: 0.0.1 - -environment: - sdk: ">=2.12.0 <3.0.0" - flutter: ">=1.17.0" - -dependencies: - flutter: - sdk: flutter - flutter_glide: - git: - url: 'https://github.com/axen1314/flutter_glide.git' - ref: 'v1.0.6' - -dev_dependencies: - flutter_test: - sdk: flutter - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages diff --git a/assistant-flutter/assistant_design/test/assistant_design_test.dart b/assistant-flutter/assistant_design/test/assistant_design_test.dart deleted file mode 100644 index d30207dd4a..0000000000 --- a/assistant-flutter/assistant_design/test/assistant_design_test.dart +++ /dev/null @@ -1,3 +0,0 @@ - - -void main() {} diff --git a/assistant-flutter/lib/common/app.dart b/assistant-flutter/lib/common/app.dart deleted file mode 100644 index 33d30bfc67..0000000000 --- a/assistant-flutter/lib/common/app.dart +++ /dev/null @@ -1,25 +0,0 @@ -//@dart=2.9 -import 'routes.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_boost/flutter_boost.dart'; - -class AssistantApp extends StatefulWidget { - @override - State createState() => AssistantAppState(); -} - -class AssistantAppState extends State { - - Route _buildRoute(RouteSettings settings, String uniqueId) { - FlutterBoostRouteFactory func = routes[settings.name]; - return func?.call(settings, uniqueId); - } - - @override - Widget build(BuildContext context) => FlutterBoostApp(_buildRoute); -} - -//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding -//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 -//BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的 -class AssistantFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} \ No newline at end of file diff --git a/assistant-flutter/lib/common/routes.dart b/assistant-flutter/lib/common/routes.dart deleted file mode 100644 index 148f8f1991..0000000000 --- a/assistant-flutter/lib/common/routes.dart +++ /dev/null @@ -1,23 +0,0 @@ -//@dart=2.9 -import 'package:flutter/cupertino.dart'; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:assistant/pages/feedback/feedback_page.dart'; - -const String FEED_BACK = "feedback"; - -Map get routes => { - "/": (settings, uniqueId) { - return PageRouteBuilder( - settings: settings, - pageBuilder: (_, __, ___) { - return FeedbackPage(); - }); - }, - FEED_BACK: (settings, uniqueId) { - return PageRouteBuilder( - settings: settings, - pageBuilder: (_, __, ___) { - return FeedbackPage(); - }); - } -}; \ No newline at end of file diff --git a/assistant-flutter/lib/main.dart b/assistant-flutter/lib/main.dart deleted file mode 100644 index 3f7e6e1a14..0000000000 --- a/assistant-flutter/lib/main.dart +++ /dev/null @@ -1,12 +0,0 @@ -//@dart=2.9 -import 'package:assistant/common/app.dart'; -import 'package:flutter/material.dart'; - -void main() { - AssistantFlutterBinding();// FlutterBoostBinding初始化 - runApp(AssistantApp());// 启动App -} - - - - diff --git a/assistant-flutter/lib/pages/feedback/feedback_page.dart b/assistant-flutter/lib/pages/feedback/feedback_page.dart deleted file mode 100644 index 7bb8fbc6d1..0000000000 --- a/assistant-flutter/lib/pages/feedback/feedback_page.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:assistant_design/assistant_design.dart'; - -import 'package:assistant/pages/feedback/fragments/help_fragment.dart'; -import 'package:assistant/pages/feedback/fragments/suggest_fragment.dart'; - -/// 帮助与反馈 -class FeedbackPage extends StatefulWidget { - @override - State createState() => FeedbackPageState(); -} - -class FeedbackPageState extends State with SingleTickerProviderStateMixin { - late TabController _controller; - - @override - void initState() { - super.initState(); - _controller = TabController(length: 2, vsync: this); - } - - @override - void dispose() { - super.dispose(); - _controller.dispose(); - } - - @override - Widget build(BuildContext context) => AnnotatedRegion( - value: const SystemUiOverlayStyle( - statusBarColor: Colors.transparent, - statusBarBrightness: Brightness.dark, - statusBarIconBrightness: Brightness.dark - ), // 修改状态栏颜色 - child: Scaffold( - appBar: AssistantAppBar( - title: '帮助与反馈', - onNavigationPressed: () {} - ), - backgroundColor: Colors.white, - body: Column( - children: [ - AssistantTabBar( - controller: _controller, - tabs: const [ - const Tab(text: "使用帮助"), - const Tab(text: "意见反馈") - ] - ), - AssistantTabBarView( - controller: _controller, - children: [ - const HelpFragment(), - const SuggestFragment(), - ] - ) - ], - ) - ) - ); - -} \ No newline at end of file diff --git a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart deleted file mode 100644 index 82012fb711..0000000000 --- a/assistant-flutter/lib/pages/feedback/fragments/help_fragment.dart +++ /dev/null @@ -1,16 +0,0 @@ - -import 'package:assistant_design/assistant_design.dart'; -import 'package:flutter/cupertino.dart'; - -class HelpFragment extends StatelessWidget { - const HelpFragment(); - - @override - Widget build(BuildContext context) => Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - AssistantSearchBar() - ], - ); - -} \ No newline at end of file diff --git a/assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart b/assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart deleted file mode 100644 index 615f7185c1..0000000000 --- a/assistant-flutter/lib/pages/feedback/fragments/suggest_fragment.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class SuggestFragment extends StatelessWidget { - - const SuggestFragment(); - - @override - Widget build(BuildContext context) => Center( - child: Text("建议"), - ); - -} \ No newline at end of file diff --git a/assistant-flutter/pubspec.lock b/assistant-flutter/pubspec.lock deleted file mode 100644 index 2edf06b15f..0000000000 --- a/assistant-flutter/pubspec.lock +++ /dev/null @@ -1,179 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - assistant_design: - dependency: "direct main" - description: - path: assistant_design - relative: true - source: path - version: "0.0.1" - async: - dependency: transitive - description: - name: async - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.6.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" - characters: - dependency: transitive - description: - name: characters - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - clock: - dependency: transitive - description: - name: clock - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - collection: - dependency: transitive - description: - name: collection - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.15.0" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.3" - fake_async: - dependency: transitive - description: - name: fake_async - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_boost: - dependency: "direct main" - description: - path: "." - ref: "v3.0-preview.9" - resolved-ref: fe438a61ffd6df6af51226b5a48bb9f533b7a1bc - url: "https://github.com/alibaba/flutter_boost.git" - source: git - version: "3.0.0" - flutter_glide: - dependency: transitive - description: - path: "." - ref: "v1.0.6" - resolved-ref: "6f045a44093ac1079b6d20a0a1b85f036e8963f0" - url: "https://github.com/axen1314/flutter_glide.git" - source: git - version: "1.0.6" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - matcher: - dependency: transitive - description: - name: matcher - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.12.10" - meta: - dependency: transitive - description: - name: meta - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.0" - path: - dependency: transitive - description: - name: path - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.8.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.8.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.10.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.0" - test_api: - dependency: transitive - description: - name: test_api - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.3.0" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.0" - vector_math: - dependency: transitive - description: - name: vector_math - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.0" -sdks: - dart: ">=2.12.0 <3.0.0" - flutter: ">=1.20.0" diff --git a/assistant-flutter/pubspec.yaml b/assistant-flutter/pubspec.yaml deleted file mode 100644 index c10fd292bb..0000000000 --- a/assistant-flutter/pubspec.yaml +++ /dev/null @@ -1,94 +0,0 @@ -name: assistant -description: 光环助手Flutter模块 - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# -# This version is used _only_ for the Runner app, which is used if you just do -# a `flutter run` or a `flutter make-host-app-editable`. It has no impact -# on any other native host app that you embed your Flutter project into. -version: 1.0.0+1 -publish_to: none - -environment: - sdk: ">=2.12.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - flutter_boost: - git: - url: 'https://github.com/alibaba/flutter_boost.git' - ref: 'v3.0-preview.9' - assistant_design: - path: 'assistant_design' - - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 - -dev_dependencies: - flutter_test: - sdk: flutter - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -flutter: - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add Flutter specific assets to your application, add an assets section, - # like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add Flutter specific custom fonts to your application, add a fonts - # section here, in this "flutter" section. Each entry in this list should - # have a "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages - - - # This section identifies your Flutter project as a module meant for - # embedding in a native host app. These identifiers should _not_ ordinarily - # be changed after generation - they are used to ensure that the tooling can - # maintain consistency when adding or modifying assets and plugins. - # They also do not have any bearing on your native host application's - # identifiers, which may be completely independent or the same as these. - module: - androidX: true - androidPackage: com.halo.assistant.flutter - iosBundleIdentifier: com.halo.assistant.flutter diff --git a/assistant-flutter/settings.gradle b/assistant-flutter/settings.gradle deleted file mode 100644 index 782a885096..0000000000 --- a/assistant-flutter/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -include ':android' -project(":android").projectDir = new File(settingsDir, ".android") diff --git a/assistant-flutter/test/widget_test.dart b/assistant-flutter/test/widget_test.dart deleted file mode 100644 index 4bdb38d844..0000000000 --- a/assistant-flutter/test/widget_test.dart +++ /dev/null @@ -1,35 +0,0 @@ -// @dart = 2.9 -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:assistant/common/app.dart'; -import 'package:flutter/material.dart'; -import 'package:assistant/pages/feedback/feedback_page.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(AssistantApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); - - testWidgets("Feedback page test", (WidgetTester tester) async { - await tester.pumpWidget(MaterialApp(home: FeedbackPage())); - }); -} diff --git a/assistant_flutter b/assistant_flutter new file mode 160000 index 0000000000..92be1e395b --- /dev/null +++ b/assistant_flutter @@ -0,0 +1 @@ +Subproject commit 92be1e395b0781a4085795a28a8f476493487696 diff --git a/settings.gradle b/settings.gradle index f8a94a7a3b..330043e8e9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir, - 'assistant-flutter/.android/include_flutter.groovy' + 'assistant_flutter/.android/include_flutter.groovy' )) //include ':libraries:im' include ':libraries:LGLibrary' From 25a95ddba01f31494d0c5f57141108d37b869a2b Mon Sep 17 00:00:00 2001 From: axen1314 <940029914@qq.com> Date: Sun, 22 Aug 2021 10:48:03 +0800 Subject: [PATCH 08/89] Added Flutter Hook --- app/build.gradle | 6 +- .../java/com/gh/common/util/DirectUtils.kt | 1 + .../gh/gamecenter/help/HelpContentFragment.kt | 3 +- .../personal/PersonalFunctionAdapter.kt | 2 +- .../main/java/com/halo/assistant/HaloApp.java | 26 ++------- assistant_flutter | 2 +- assistant_flutter_hook/.gitignore | 1 + assistant_flutter_hook/README.md | 0 assistant_flutter_hook/build.gradle | 47 +++++++++++++++ assistant_flutter_hook/consumer-rules.pro | 0 assistant_flutter_hook/proguard-rules.pro | 21 +++++++ .../flutter/hook/ExampleInstrumentedTest.java | 26 +++++++++ .../src/main/AndroidManifest.xml | 5 ++ .../flutter/hook/FlutterBoostHook.java | 58 +++++++++++++++++++ .../hook/FlutterDynamicChannelHook.java | 11 ++++ .../flutter/hook/ExampleUnitTest.java | 17 ++++++ build.gradle | 5 +- gradle.properties | 1 + settings.gradle | 3 +- 19 files changed, 208 insertions(+), 27 deletions(-) create mode 100644 assistant_flutter_hook/.gitignore create mode 100644 assistant_flutter_hook/README.md create mode 100644 assistant_flutter_hook/build.gradle create mode 100644 assistant_flutter_hook/consumer-rules.pro create mode 100644 assistant_flutter_hook/proguard-rules.pro create mode 100644 assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java create mode 100644 assistant_flutter_hook/src/main/AndroidManifest.xml create mode 100644 assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java create mode 100644 assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java create mode 100644 assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java diff --git a/app/build.gradle b/app/build.gradle index ee3b9f0c96..78fca85d20 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,11 +2,15 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' +apply plugin: 'me.ele.lancet' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' + import groovy.xml.XmlUtil +//aspectjx { exclude 'androidx', 'com.google', 'com.gh.gamecenter' } + android { androidExtensions { @@ -355,7 +359,7 @@ dependencies { // Flutter模块 implementation project(':flutter') - implementation project(':flutter_boost') + implementation project(':assistant_flutter_hook') } File propFile = file('sign.properties') if (propFile.exists()) { diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index f479daeecf..7139dad930 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -1276,6 +1276,7 @@ object DirectUtils { /** * 跳转至使用帮助与反馈 * @param position 使用帮助:[HelpAndFeedbackActivity.HELP_ITEM],意见反馈:[HelpAndFeedbackActivity.SUGGESTION_ITEM] + * 引入assistant_flutter_hook模块后,该方法会被Hook为启动Flutter界面 */ @JvmStatic fun directToHelpAndFeedback(context: Context, position: Int = HelpAndFeedbackActivity.HELP_ITEM) { diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt b/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt index 3944e6d3fc..86b832ff17 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.RecyclerView +import com.gh.common.util.DirectUtils import com.gh.common.util.EntranceUtils import com.gh.common.util.UrlFilterUtils import com.gh.gamecenter.HelpAndFeedbackActivity @@ -63,7 +64,7 @@ class HelpContentFragment : ListFragment { MtaHelper.onEvent("我的光环", "反馈") - context.startActivity(HelpAndFeedbackActivity.getIntent(context)) + DirectUtils.directToHelpAndFeedback(context) } "浏览记录" -> { context.startActivity(HistoryActivity.getHistoryIntent(context, "我的光环-浏览记录")) diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 32aa1b99c7..db2ce6f397 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -333,27 +333,11 @@ public class HaloApp extends MultiDexApplication { }); } - private void initFlutterBoost() { - FlutterBoost.instance().setup(this, new FlutterBoostDelegate() { - @Override - public void pushNativeRoute(FlutterBoostRouteOptions options) { - - } - - @Override - public void pushFlutterRoute(FlutterBoostRouteOptions options) { - // 获取路由信息,并开启一个FlutterBoostActivity作为Flutter的容器 - Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class) - .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) - .destroyEngineWithActivity(false) - .uniqueId(options.uniqueId()) - .url(options.pageName()) - .urlParams(options.arguments()) - .build(FlutterBoost.instance().currentActivity()); - FlutterBoost.instance().currentActivity().startActivity(intent); - } - }, null); - } + /** + * FlutterBoost初始化 + * 引入assistant_flutter_hook模块后, 会hook该方法实现FlutterBoost初始化 + */ + private void initFlutterBoost() { } public boolean isPostInitialized() { return mIsPostInitialized; diff --git a/assistant_flutter b/assistant_flutter index 92be1e395b..09fbc4f6bf 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 92be1e395b0781a4085795a28a8f476493487696 +Subproject commit 09fbc4f6bfbbaf83bccc88b1ed7b1b90f981628b diff --git a/assistant_flutter_hook/.gitignore b/assistant_flutter_hook/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/assistant_flutter_hook/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/assistant_flutter_hook/README.md b/assistant_flutter_hook/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/assistant_flutter_hook/build.gradle b/assistant_flutter_hook/build.gradle new file mode 100644 index 0000000000..5916d54548 --- /dev/null +++ b/assistant_flutter_hook/build.gradle @@ -0,0 +1,47 @@ +plugins { + id 'com.android.library' + id 'kotlin-android' + id 'kotlin-android-extensions' +} + + +android { + compileSdkVersion 30 + + defaultConfig { + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'com.google.android.material:material:1.4.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6' + implementation project(':flutter_boost') + implementation project(':flutter_dynamic_channel') + implementation "androidx.core:core-ktx:${core}" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/assistant_flutter_hook/consumer-rules.pro b/assistant_flutter_hook/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/assistant_flutter_hook/proguard-rules.pro b/assistant_flutter_hook/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/assistant_flutter_hook/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java b/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java new file mode 100644 index 0000000000..428cfd18ea --- /dev/null +++ b/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.halo.assistant.flutter.hook; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.halo.assistant.flutter.hook.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/assistant_flutter_hook/src/main/AndroidManifest.xml b/assistant_flutter_hook/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..a7a72551c7 --- /dev/null +++ b/assistant_flutter_hook/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java new file mode 100644 index 0000000000..16e8e05abd --- /dev/null +++ b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java @@ -0,0 +1,58 @@ +package com.halo.assistant.flutter.hook; + +import android.app.Application; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.idlefish.flutterboost.FlutterBoost; +import com.idlefish.flutterboost.FlutterBoostDelegate; +import com.idlefish.flutterboost.FlutterBoostRouteOptions; +import com.idlefish.flutterboost.containers.FlutterBoostActivity; + +import io.flutter.embedding.android.FlutterActivityLaunchConfigs; +import me.ele.lancet.base.This; +import me.ele.lancet.base.annotations.Insert; +import me.ele.lancet.base.annotations.TargetClass; + +public class FlutterBoostHook { + + @TargetClass("com.halo.assistant.HaloApp") + @Insert("initFlutterBoost") + private void initFlutterBoost() { + Log.d(FlutterBoostHook.class.getSimpleName(), "=======FlutterBoost初始化======="); + FlutterBoost.instance() + .setup((Application) (This.get()), new Delegate(), null); + } + + @TargetClass("com.gh.common.util.DirectUtils") + @Insert("directToHelpAndFeedback") + public static void directToHelpAndFeedback(Context context, int position) { + Log.d(FlutterBoostHook.class.getSimpleName(), "=======跳转到帮助与反馈======="); + FlutterBoostRouteOptions options = new FlutterBoostRouteOptions.Builder() + .pageName("feedback") + .build(); + FlutterBoost.instance().open(options); + } + + public static final class Delegate implements FlutterBoostDelegate { + + @Override + public void pushNativeRoute(FlutterBoostRouteOptions options) { + + } + + @Override + public void pushFlutterRoute(FlutterBoostRouteOptions options) { + // 获取路由信息,并开启一个FlutterBoostActivity作为Flutter的容器 + Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class) + .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) + .destroyEngineWithActivity(false) + .uniqueId(options.uniqueId()) + .url(options.pageName()) + .urlParams(options.arguments()) + .build(FlutterBoost.instance().currentActivity()); + FlutterBoost.instance().currentActivity().startActivity(intent); + } + } +} diff --git a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java new file mode 100644 index 0000000000..2f549b649e --- /dev/null +++ b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java @@ -0,0 +1,11 @@ +/* + Flutter与Native交互动态注册 + */ +package com.halo.assistant.flutter.hook; + +class FlutterDynamicChannelHook { + + public static void setupFlutterDynamicChannel() { + + } +} \ No newline at end of file diff --git a/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java b/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java new file mode 100644 index 0000000000..d0f1571471 --- /dev/null +++ b/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.halo.assistant.flutter.hook; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1c432c2040..52b5c126cc 100644 --- a/build.gradle +++ b/build.gradle @@ -17,11 +17,14 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:4.1.0" +// classpath "com.android.tooFls.build:gradle:4.1.0" + // AspectJX支持的Gradle插件版本最高为3.6.1,这里降低了版本 + classpath "com.android.tools.build:gradle:3.6.1" classpath "io.sentry:sentry-android-gradle-plugin:1.7.36" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' + classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' } } diff --git a/gradle.properties b/gradle.properties index 9ba14a15ed..90d3ef7aee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,6 +14,7 @@ # org.gradle.parallel=true #Wed Jul 19 10:16:09 CST 2017 #android.enableD8=false +org.gradle.daemon=true org.gradle.jvmargs=-Xmx2048m -XX\:MaxPermSize\=512m -XX\:+HeapDumpOnOutOfMemoryError -Dfile.encoding\=UTF-8 org.gradle.parallel=true diff --git a/settings.gradle b/settings.gradle index 330043e8e9..b48bbb0904 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,4 +11,5 @@ include ':libraries:QQShare' //include ':libraries:TalkingData' //include ':libraries:UmengPush' //include ':libraries:WechatShare' -include ':libraries:Matisse' \ No newline at end of file +include ':libraries:Matisse' +include ':assistant_flutter_hook' From 60e542923c9ff47ca99d70b71c09486cbd0ce1dc Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 23 Aug 2021 17:13:23 +0800 Subject: [PATCH 09/89] =?UTF-8?q?Updated=20=E5=B0=86hook=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E9=9B=86=E6=88=90=E5=88=B0Flutter=20Module=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/halo/assistant/HaloApp.java | 1 - assistant_flutter | 2 +- assistant_flutter_hook/.gitignore | 1 - assistant_flutter_hook/README.md | 0 assistant_flutter_hook/build.gradle | 47 --------------- assistant_flutter_hook/consumer-rules.pro | 0 assistant_flutter_hook/proguard-rules.pro | 21 ------- .../flutter/hook/ExampleInstrumentedTest.java | 26 --------- .../src/main/AndroidManifest.xml | 5 -- .../flutter/hook/FlutterBoostHook.java | 58 ------------------- .../hook/FlutterDynamicChannelHook.java | 11 ---- .../flutter/hook/ExampleUnitTest.java | 17 ------ settings.gradle | 5 +- 13 files changed, 3 insertions(+), 191 deletions(-) delete mode 100644 assistant_flutter_hook/.gitignore delete mode 100644 assistant_flutter_hook/README.md delete mode 100644 assistant_flutter_hook/build.gradle delete mode 100644 assistant_flutter_hook/consumer-rules.pro delete mode 100644 assistant_flutter_hook/proguard-rules.pro delete mode 100644 assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java delete mode 100644 assistant_flutter_hook/src/main/AndroidManifest.xml delete mode 100644 assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java delete mode 100644 assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java delete mode 100644 assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index db2ce6f397..3aceda729e 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -160,7 +160,6 @@ public class HaloApp extends MultiDexApplication { AppExecutor.getIoExecutor().execute(() -> { initDataHelper(); - Tracker.init(this); // 初始化 Fresco(BigImageViewer 已包含Fresco) if (!ImageUtils.isFrescoInitialized()) { diff --git a/assistant_flutter b/assistant_flutter index 09fbc4f6bf..30136b3cc6 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 09fbc4f6bfbbaf83bccc88b1ed7b1b90f981628b +Subproject commit 30136b3cc63fa3385463a4b69dd63002739832e7 diff --git a/assistant_flutter_hook/.gitignore b/assistant_flutter_hook/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/assistant_flutter_hook/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/assistant_flutter_hook/README.md b/assistant_flutter_hook/README.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/assistant_flutter_hook/build.gradle b/assistant_flutter_hook/build.gradle deleted file mode 100644 index 5916d54548..0000000000 --- a/assistant_flutter_hook/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -plugins { - id 'com.android.library' - id 'kotlin-android' - id 'kotlin-android-extensions' -} - - -android { - compileSdkVersion 30 - - defaultConfig { - minSdkVersion 21 - targetSdkVersion 30 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } -} - -dependencies { - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.4.0' - testImplementation 'junit:junit:4.+' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6' - implementation project(':flutter_boost') - implementation project(':flutter_dynamic_channel') - implementation "androidx.core:core-ktx:${core}" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} -repositories { - mavenCentral() -} \ No newline at end of file diff --git a/assistant_flutter_hook/consumer-rules.pro b/assistant_flutter_hook/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/assistant_flutter_hook/proguard-rules.pro b/assistant_flutter_hook/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/assistant_flutter_hook/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java b/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java deleted file mode 100644 index 428cfd18ea..0000000000 --- a/assistant_flutter_hook/src/androidTest/java/com/halo/assistant/flutter/hook/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.halo.assistant.flutter.hook; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.halo.assistant.flutter.hook.test", appContext.getPackageName()); - } -} \ No newline at end of file diff --git a/assistant_flutter_hook/src/main/AndroidManifest.xml b/assistant_flutter_hook/src/main/AndroidManifest.xml deleted file mode 100644 index a7a72551c7..0000000000 --- a/assistant_flutter_hook/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java deleted file mode 100644 index 16e8e05abd..0000000000 --- a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterBoostHook.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.halo.assistant.flutter.hook; - -import android.app.Application; -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import com.idlefish.flutterboost.FlutterBoost; -import com.idlefish.flutterboost.FlutterBoostDelegate; -import com.idlefish.flutterboost.FlutterBoostRouteOptions; -import com.idlefish.flutterboost.containers.FlutterBoostActivity; - -import io.flutter.embedding.android.FlutterActivityLaunchConfigs; -import me.ele.lancet.base.This; -import me.ele.lancet.base.annotations.Insert; -import me.ele.lancet.base.annotations.TargetClass; - -public class FlutterBoostHook { - - @TargetClass("com.halo.assistant.HaloApp") - @Insert("initFlutterBoost") - private void initFlutterBoost() { - Log.d(FlutterBoostHook.class.getSimpleName(), "=======FlutterBoost初始化======="); - FlutterBoost.instance() - .setup((Application) (This.get()), new Delegate(), null); - } - - @TargetClass("com.gh.common.util.DirectUtils") - @Insert("directToHelpAndFeedback") - public static void directToHelpAndFeedback(Context context, int position) { - Log.d(FlutterBoostHook.class.getSimpleName(), "=======跳转到帮助与反馈======="); - FlutterBoostRouteOptions options = new FlutterBoostRouteOptions.Builder() - .pageName("feedback") - .build(); - FlutterBoost.instance().open(options); - } - - public static final class Delegate implements FlutterBoostDelegate { - - @Override - public void pushNativeRoute(FlutterBoostRouteOptions options) { - - } - - @Override - public void pushFlutterRoute(FlutterBoostRouteOptions options) { - // 获取路由信息,并开启一个FlutterBoostActivity作为Flutter的容器 - Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class) - .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) - .destroyEngineWithActivity(false) - .uniqueId(options.uniqueId()) - .url(options.pageName()) - .urlParams(options.arguments()) - .build(FlutterBoost.instance().currentActivity()); - FlutterBoost.instance().currentActivity().startActivity(intent); - } - } -} diff --git a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java b/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java deleted file mode 100644 index 2f549b649e..0000000000 --- a/assistant_flutter_hook/src/main/java/com/halo/assistant/flutter/hook/FlutterDynamicChannelHook.java +++ /dev/null @@ -1,11 +0,0 @@ -/* - Flutter与Native交互动态注册 - */ -package com.halo.assistant.flutter.hook; - -class FlutterDynamicChannelHook { - - public static void setupFlutterDynamicChannel() { - - } -} \ No newline at end of file diff --git a/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java b/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java deleted file mode 100644 index d0f1571471..0000000000 --- a/assistant_flutter_hook/src/test/java/com/halo/assistant/flutter/hook/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.halo.assistant.flutter.hook; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index b48bbb0904..dd9f77c04b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,8 @@ include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( - settingsDir, - 'assistant_flutter/.android/include_flutter.groovy' + settingsDir, + 'assistant_flutter/include_flutter.groovy' )) //include ':libraries:im' include ':libraries:LGLibrary' @@ -12,4 +12,3 @@ include ':libraries:QQShare' //include ':libraries:UmengPush' //include ':libraries:WechatShare' include ':libraries:Matisse' -include ':assistant_flutter_hook' From eb2228fb178ae7f3183cc5544b8b4c9eb408b9bb Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 24 Aug 2021 15:15:49 +0800 Subject: [PATCH 10/89] =?UTF-8?q?Added=20HaloApp=E6=B7=BB=E5=8A=A0Native?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=B3=A8=E5=86=8C=E5=85=A5=E5=8F=A3--initFlu?= =?UTF-8?q?tterDyncExtension?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/halo/assistant/HaloApp.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 3aceda729e..868b311bcf 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -230,7 +230,10 @@ public class HaloApp extends MultiDexApplication { initConnectivityChangesReceiver(); initTimeConsumingAction(); + + // Flutter模块初始化 initFlutterBoost(); + initFlutterDyncExtension(); // 注册回调以用于做各种统计 ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner()); @@ -333,11 +336,17 @@ public class HaloApp extends MultiDexApplication { } /** - * FlutterBoost初始化 - * 引入assistant_flutter_hook模块后, 会hook该方法实现FlutterBoost初始化 + * FlutterBoost初始化,通过Lancet注入代码 + * 请确保该方法名与{@link com.halo.assistant.flutter.hook.FlutterBoostHook}对应的方法名保持一致 */ private void initFlutterBoost() { } + /** + * 使用FlutterDynamicChannel接入Native方法,通过Lancet注入代码 + * 请确保该方法名与{@link com.halo.assistant.flutter.hook.FlutterDynamicChannelHook}对应的方法名保持一致 + */ + private void initFlutterDyncExtension() { } + public boolean isPostInitialized() { return mIsPostInitialized; } From 2f6af6c18e8b155f86dd97df1eece2a9fc409275 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 31 Aug 2021 18:54:41 +0800 Subject: [PATCH 11/89] =?UTF-8?q?Updated=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/download/dialog/DownloadDialogAdapter.kt | 4 ++-- app/src/main/java/com/gh/gamecenter/QaActivity.kt | 4 ++++ .../main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt index e03cb5806e..789b0c23be 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt @@ -96,10 +96,10 @@ class DownloadDialogAdapter(context: Context, mContext.startActivity(NewsDetailActivity.getIntentById(mContext, data.linkId, mEntrance)) } "qa" -> { - mContext.startActivity(QaActivity.getIntent(mContext, data.linkText, qaId = data.linkId)) + QaActivity.startActivity(mContext, data.linkText, qaId = data.linkId) } "qa_collection" -> { - mContext.startActivity(QaActivity.getIntent(mContext, data.linkText, qaCollectionId = data.linkId)) + QaActivity.startActivity(mContext, data.linkText, qaCollectionId = data.linkId) } else -> { //Utils.toast(mContext, "暂不支持类型:" + data.linkType) diff --git a/app/src/main/java/com/gh/gamecenter/QaActivity.kt b/app/src/main/java/com/gh/gamecenter/QaActivity.kt index d0818a689c..2a96aecdf2 100644 --- a/app/src/main/java/com/gh/gamecenter/QaActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/QaActivity.kt @@ -21,6 +21,10 @@ class QaActivity : NormalActivity() { args.putString(EntranceUtils.KEY_NAVIGATION_TITLE, navigationTitle) return getTargetIntent(context, QaActivity::class.java, HelpContainerFragment::class.java, args) } + + fun startActivity(context: Context, navigationTitle: String, qaId: String? = null, qaCollectionId: String? = null) { + context.startActivity(getIntent(context, navigationTitle, qaId, qaCollectionId)) + } } override fun provideNormalIntent(): Intent { diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt index 1035108f37..dbd3674f88 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt @@ -45,7 +45,7 @@ class HelpQaCategoryAdapter(val context: Context, val mQaCollectionId: String?) adapter = HelpQaAdapter(context, helpCategoryEntity, mQaCollectionId) } holder.binding.categoryMore.setOnClickListener { - context.startActivity(QaActivity.getIntent(context, helpCategoryEntity.name, helpCategoryEntity.id, "")) + QaActivity.startActivity(context, helpCategoryEntity.name, helpCategoryEntity.id, "") if (!mQaCollectionId.isNullOrEmpty()) { MtaHelper.onEvent("QA", "QA合集点击", "点击更多+${helpCategoryEntity.name}") } else { From 4ddaccd3f456c03c9606e8c35d85b4ba60ebe87a Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 1 Sep 2021 10:50:49 +0800 Subject: [PATCH 12/89] =?UTF-8?q?Updated=20Flutter=20AndroidManifest?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E8=BF=81=E7=A7=BB=E5=88=B0hook=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 14 -------------- libraries/LGLibrary | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a43e3271b2..1a914c8307 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -845,20 +845,6 @@ android:authorities="${applicationId}.TTMultiProvider" android:exported="false" />--> - - - - - - - - \ No newline at end of file diff --git a/libraries/LGLibrary b/libraries/LGLibrary index ba2591cec4..6fafcf506f 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit ba2591cec44568b233ba7b73e2b4edac06b6535f +Subproject commit 6fafcf506ff32306d449323189a29e1eeeb157cc From 7ea53f305d6fc70e6b398344833c51efbc215f1f Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 1 Sep 2021 17:45:15 +0800 Subject: [PATCH 13/89] merge --- .../java/com/gh/common/DefaultUrlHandler.kt | 23 ++++++++++++++++--- .../com/gh/common/util/EntranceUtils.java | 1 + assistant_flutter | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 27f8feaa70..f18cac805d 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.net.Uri import android.text.TextUtils import android.util.Base64 +import com.gh.common.constant.Constants import com.gh.common.util.* import com.gh.common.util.DirectUtils.directToFeedback import com.gh.common.util.DirectUtils.directToGameDetailVideoStreaming @@ -15,9 +16,7 @@ import com.gh.common.util.DirectUtils.directToLinkPage import com.gh.common.util.DirectUtils.directToQa import com.gh.common.util.DirectUtils.directToVideoDetail import com.gh.common.util.GsonUtils.gson -import com.gh.gamecenter.LibaoDetailActivity -import com.gh.gamecenter.MainActivity -import com.gh.gamecenter.NewsDetailActivity +import com.gh.gamecenter.* import com.gh.gamecenter.entity.* import com.gh.gamecenter.qa.BbsType import com.gh.gamecenter.qa.video.publish.VideoPublishActivity @@ -336,6 +335,24 @@ object DefaultUrlHandler { val position = uri.getQueryParameter("position") ?: "" DirectUtils.directToHelpAndFeedback(context, position.toInt()) } + + EntranceUtils.HOST_WEB_QA -> { + var url = uri.getQueryParameter("url") + if (!url.isNullOrEmpty()) { + context.startActivity(WebActivity.getIntent(context, url, false)) + } else { + url = if ("internal" == BuildConfig.FLAVOR) { + Constants.HELP_ADDRESS_DEV + } else { + Constants.HELP_ADDRESS + } + val id = uri.getQueryParameter("id") + val name = uri.getQueryParameter("name") + val qaCollectionId = uri.getQueryParameter("collection_id") + context.startActivity(WebActivity.getIntent(context, "$url$id", name, true, if (!qaCollectionId.isNullOrEmpty()) 0 else 1)) + } + } + else -> DialogHelper.showUpgradeDialog(context) } return true diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index e9da6addde..ceeb792161 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -92,6 +92,7 @@ public class EntranceUtils { public static final String HOST_GAME_RATING_DETAIL = "game_rating_detail"; public static final String HOST_HELP_AND_FEEDBACK = "help_and_feedback"; public static final String HOST_LAUNCH_SIMULATOR_GAME = "launch_simulator_game"; + public static final String HOST_WEB_QA = "web_qa"; public static final String KEY_DATA = "data"; public static final String KEY_MESSAGE = "message"; public static final String KEY_MESSAGE_ID = "message_id"; diff --git a/assistant_flutter b/assistant_flutter index 30136b3cc6..22cd3e478d 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 30136b3cc63fa3385463a4b69dd63002739832e7 +Subproject commit 22cd3e478d6c28edce5bea577d3a571ba8fddb0e From c2226f8452df1a746626e31172b64b8ff1bd414b Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 3 Sep 2021 11:21:57 +0800 Subject: [PATCH 14/89] =?UTF-8?q?Updated=20=E6=8F=90=E5=8D=87=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/DefaultUrlHandler.kt | 21 ++++++++++++++++++- .../com/gh/common/util/EntranceUtils.java | 3 ++- .../java/com/gh/gamecenter/MainActivity.java | 2 +- assistant_flutter | 2 +- gradle.properties | 13 +++++++++++- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index f2e3d8741b..5fb187ad69 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -1,5 +1,6 @@ package com.gh.common +import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri @@ -20,7 +21,9 @@ import com.gh.gamecenter.entity.* import com.gh.gamecenter.qa.BbsType import com.gh.gamecenter.qa.video.publish.VideoPublishActivity import com.gh.gamecenter.subject.SubjectActivity +import com.gh.gamecenter.suggest.SuggestType import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel +import com.idlefish.flutterboost.FlutterBoost import com.lightgame.utils.Utils import java.nio.charset.Charset @@ -339,7 +342,7 @@ object DefaultUrlHandler { DirectUtils.directToHelpAndFeedback(context, position.toInt()) } - EntranceUtils.HOST_WEB_QA -> { + EntranceUtils.HOST_HELP_DETAIL -> { var url = uri.getQueryParameter("url") if (!url.isNullOrEmpty()) { context.startActivity(WebActivity.getIntent(context, url, false)) @@ -356,6 +359,22 @@ object DefaultUrlHandler { } } + EntranceUtils.HOST_HELP_SUGGESTION -> { + val suggestType = when(uri.getQueryParameter("type")) { + "normal" -> SuggestType.normal + "crash" -> SuggestType.crash + "gameQuestion" -> SuggestType.gameQuestion + "gameCollect" -> SuggestType.gameCollect + "functionSuggest" -> SuggestType.functionSuggest + "articleCollect" -> SuggestType.articleCollect + "copyright" -> SuggestType.copyright + else -> null + } + suggestType?.let { + (context as Activity).startActivityForResult(SuggestionActivity.getIntent(context, it), 11) + } + } + else -> DialogHelper.showUpgradeDialog(context) } return true diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index 32c7f446da..f4744fc451 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -93,7 +93,8 @@ public class EntranceUtils { public static final String HOST_GAME_RATING_DETAIL = "game_rating_detail"; public static final String HOST_HELP_AND_FEEDBACK = "help_and_feedback"; public static final String HOST_LAUNCH_SIMULATOR_GAME = "launch_simulator_game"; - public static final String HOST_WEB_QA = "web_qa"; + public static final String HOST_HELP_DETAIL = "help_detail"; + public static final String HOST_HELP_SUGGESTION = "help_suggestion"; public static final String KEY_DATA = "data"; public static final String KEY_MESSAGE = "message"; public static final String KEY_MESSAGE_ID = "message_id"; diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 3a4b18aa7c..c8a72ed8af 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -322,7 +322,7 @@ public class MainActivity extends BaseActivity { deleteSimulatorGame(); QuickLoginHelper.getPhoneInfo(this); - initWBSDK(); +// initWBSDK(); } //上传关注视频浏览记录 diff --git a/assistant_flutter b/assistant_flutter index 22cd3e478d..b60bdf06b6 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 22cd3e478d6c28edce5bea577d3a571ba8fddb0e +Subproject commit b60bdf06b6e482c69fd3ae2a79af8b065660c89e diff --git a/gradle.properties b/gradle.properties index def161b6e3..771d776c17 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,9 +14,20 @@ # org.gradle.parallel=true #Wed Jul 19 10:16:09 CST 2017 #android.enableD8=false +# Enable Gradle Daemon org.gradle.daemon=true -org.gradle.jvmargs=-Xmx2048m -XX\:MaxPermSize\=512m -XX\:+HeapDumpOnOutOfMemoryError -Dfile.encoding\=UTF-8 +# Enable parallel builds org.gradle.parallel=true +# Enable Configure on demand +org.gradle.configureondemand=true +# Enable Build Cache +android.enableBuildCache=true +# Set this in gradle.properties +org.gradle.caching=true +# Increase memory allotted to JVM +org.gradle.jvmargs=-Xmx2048m -XX\:MaxPermSize\=512m -XX\:+HeapDumpOnOutOfMemoryError -Dfile.encoding\=UTF-8 +# Enable Kotlin incremental +kotlin.incremental=true # channel packages channel_file=channel.txt From 27ceb7b042597e4544f9eebd7a47ddf49f6ef16e Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 3 Sep 2021 11:24:23 +0800 Subject: [PATCH 15/89] =?UTF-8?q?Updated=20=E6=8F=90=E5=8D=87=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/gamecenter/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index c8a72ed8af..3a4b18aa7c 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -322,7 +322,7 @@ public class MainActivity extends BaseActivity { deleteSimulatorGame(); QuickLoginHelper.getPhoneInfo(this); -// initWBSDK(); + initWBSDK(); } //上传关注视频浏览记录 From bad6b495b16145ad8109e7c09d4fda883d266258 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 3 Sep 2021 16:53:50 +0800 Subject: [PATCH 16/89] =?UTF-8?q?Updated=20=E6=8F=90=E5=8D=87=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index b60bdf06b6..129e5c2acc 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit b60bdf06b6e482c69fd3ae2a79af8b065660c89e +Subproject commit 129e5c2acc42c91fd24aaaf3124f4f68ee11c364 From 9741cac1cffa56390f26860097f0e4d33d87d49b Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 6 Sep 2021 10:55:09 +0800 Subject: [PATCH 17/89] =?UTF-8?q?Updated=20=E6=8F=90=E5=8D=87=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/halo/assistant/HaloApp.java | 8 ++++---- assistant_flutter | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 51868d88b9..d9827bc107 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -201,6 +201,10 @@ public class HaloApp extends MultiDexApplication { } registerActivityLifecycleCallbacks(new GlobalActivityLifecycleObserver()); + + // Flutter模块初始化 + initFlutterBoost(); + initFlutterDyncExtension(); } /** @@ -233,10 +237,6 @@ public class HaloApp extends MultiDexApplication { initConnectivityChangesReceiver(); initTimeConsumingAction(); - - // Flutter模块初始化 - initFlutterBoost(); - initFlutterDyncExtension(); // 注册回调以用于做各种统计 ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner()); diff --git a/assistant_flutter b/assistant_flutter index 129e5c2acc..24dc133b32 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 129e5c2acc42c91fd24aaaf3124f4f68ee11c364 +Subproject commit 24dc133b328361bdfded4600f77345bd6d7d27ad From 60e4f2a378dd030a4a8f51673ae08ce02b51dc1e Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 7 Sep 2021 12:28:52 +0800 Subject: [PATCH 18/89] =?UTF-8?q?Fixed=20=E8=A7=A3=E5=86=B3=E6=8E=A5?= =?UTF-8?q?=E5=85=A5Flutter=E6=A8=A1=E5=9D=97=E5=90=8E=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E6=85=A2=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E5=A4=A7=E5=A4=A7=E6=8F=90=E5=8D=87=E7=BC=96=E8=AF=91=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=20Added=20=E6=8E=A5=E5=8F=A3Host=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BB=8Eapp=E4=B8=AD=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 - app/src/main/java/com/gh/common/DefaultUrlHandler.kt | 1 - app/src/main/java/com/halo/assistant/HaloApp.java | 5 ----- assistant_flutter | 2 +- build.gradle | 4 +--- gradle.properties | 6 ++++++ libraries/LGLibrary | 2 +- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 29611feff2..c1846fa41d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -361,7 +361,6 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation project(':flutter') implementation project(':assistant_flutter_hook') } File propFile = file('sign.properties') diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 5fb187ad69..66d99afe86 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -23,7 +23,6 @@ import com.gh.gamecenter.qa.video.publish.VideoPublishActivity import com.gh.gamecenter.subject.SubjectActivity import com.gh.gamecenter.suggest.SuggestType import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel -import com.idlefish.flutterboost.FlutterBoost import com.lightgame.utils.Utils import java.nio.charset.Charset diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index d9827bc107..a0bbd4e4b0 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -46,10 +46,6 @@ import com.gh.gamecenter.receiver.NetworkStateReceiver; import com.gh.gamecenter.user.UserRepository; import com.github.piasy.biv.BigImageViewer; import com.github.piasy.biv.loader.fresco.FrescoImageLoader; -import com.idlefish.flutterboost.FlutterBoost; -import com.idlefish.flutterboost.FlutterBoostDelegate; -import com.idlefish.flutterboost.FlutterBoostRouteOptions; -import com.idlefish.flutterboost.containers.FlutterBoostActivity; import com.leon.channel.helper.ChannelReaderUtil; import com.lightgame.utils.Utils; import com.llew.huawei.verifier.LoadedApkHuaWei; @@ -59,7 +55,6 @@ import com.squareup.picasso.Picasso; import java.lang.reflect.Method; -import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.reactivex.plugins.RxJavaPlugins; import tv.danmaku.ijk.media.exo2.Exo2PlayerManager; import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager; diff --git a/assistant_flutter b/assistant_flutter index 24dc133b32..24cfaf0c94 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 24dc133b328361bdfded4600f77345bd6d7d27ad +Subproject commit 24cfaf0c948222b32dfda5bb8b650aaf1a52a725 diff --git a/build.gradle b/build.gradle index dcde164fa0..2ad15b227e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,7 @@ buildscript { } dependencies { -// classpath "com.android.tooFls.build:gradle:4.1.0" - // AspectJX支持的Gradle插件版本最高为3.6.1,这里降低了版本 - classpath "com.android.tools.build:gradle:3.6.1" + classpath "com.android.tools.build:gradle:4.1.3" classpath "io.sentry:sentry-android-gradle-plugin:1.7.36" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... diff --git a/gradle.properties b/gradle.properties index 771d776c17..1ec40b8cdf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -79,5 +79,11 @@ android.enableR8 = true kapt.use.worker.api = true kapt.incremental.apt = true +# 数据绑定增量注解处理 +android.databinding.incremental=true + # 部分 vivo 手机不去掉 testOnly 直接装不上 :( android.injected.testOnly = false + + + diff --git a/libraries/LGLibrary b/libraries/LGLibrary index 6fafcf506f..d3ad512b7b 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit 6fafcf506ff32306d449323189a29e1eeeb157cc +Subproject commit d3ad512b7b53427ed024ddba44dfa0cbd6e62691 From 2b0abb17405336fcb1a5c7b9a5f38223598c9d16 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 7 Sep 2021 12:49:17 +0800 Subject: [PATCH 19/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E4=BC=98=E5=8C=96=E7=BC=96=E8=AF=91=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gradle.properties b/gradle.properties index 1ec40b8cdf..b7c6d7e1c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,5 +85,8 @@ android.databinding.incremental=true # 部分 vivo 手机不去掉 testOnly 直接装不上 :( android.injected.testOnly = false +# 启用后每个库的 R 类仅包含库本身声明的资源,而不包含其依赖项的资源 +# 声明该属性可加快Flutter模块编译速度(Experimental) +# android.nonTransitiveRClass=true From 741b2c23d29633d6ce7dc74041416bc8611f0487 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 7 Sep 2021 18:40:16 +0800 Subject: [PATCH 20/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0Flutter=20Mod?= =?UTF-8?q?ule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 24cfaf0c94..2bb28da297 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 24cfaf0c948222b32dfda5bb8b650aaf1a52a725 +Subproject commit 2bb28da297b84df6619d182b94468a8fad4c5ae8 From ea49ef26913f2a9c04bb61cd72d28eea1a742db2 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 7 Sep 2021 22:39:07 +0800 Subject: [PATCH 21/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0Flutter=20Mod?= =?UTF-8?q?ule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 2bb28da297..eb14000828 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 2bb28da297b84df6619d182b94468a8fad4c5ae8 +Subproject commit eb14000828e28e2fa897b15d97e42a8cfdb06de3 From e388a60d43d565ce47649bd217eeae17858c4070 Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 8 Sep 2021 09:56:16 +0800 Subject: [PATCH 22/89] =?UTF-8?q?Updated=20=E4=BF=AE=E6=94=B9=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E9=97=AE=E9=A2=98=E9=A1=B5=E7=9A=84Hook=E4=B8=BADirec?= =?UTF-8?q?tUtils.directToQa=E5=92=8CDirectUtils.directToQaCollection=20Ad?= =?UTF-8?q?ded=20=E5=B0=86DirectUtils=E5=8A=A0=E5=85=A5app=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84proguard-rules.txt=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/proguard-rules.txt | 7 +++++++ app/src/main/java/com/gh/common/util/DirectUtils.kt | 2 ++ .../java/com/gh/download/dialog/DownloadDialogAdapter.kt | 4 ++-- .../java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt | 3 ++- assistant_flutter | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 5dbda15ef8..4f9da45c34 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -139,4 +139,11 @@ ### 避免 WebChromeClient 被混淆 -keepclassmembers class * extends android.webkit.WebChromeClient{ public void openFileChooser(...); +} + +# Flutter模块 +-keep public class com.gh.common.util.DirectUtils { + public static void directToQa(...); + public static void directToQaCollection(...); + public static void directToFeedback(...); } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index afcbbd412d..45dd70427a 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -341,6 +341,7 @@ object DirectUtils { /** * 跳转至QA + * 请不要随意修改,引入Flutter模块后会Hook该函数 */ @JvmStatic fun directToQa(context: Context, text: String? = "", id: String) { @@ -354,6 +355,7 @@ object DirectUtils { /** * 跳转至QA合集 + * 请不要随意修改,引入Flutter模块后会Hook该函数 */ @JvmStatic fun directToQaCollection(context: Context, text: String, id: String) { diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt index 789b0c23be..5631cdd6ec 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt @@ -96,10 +96,10 @@ class DownloadDialogAdapter(context: Context, mContext.startActivity(NewsDetailActivity.getIntentById(mContext, data.linkId, mEntrance)) } "qa" -> { - QaActivity.startActivity(mContext, data.linkText, qaId = data.linkId) + DirectUtils.directToQa(mContext, data.linkText, data.linkId) } "qa_collection" -> { - QaActivity.startActivity(mContext, data.linkText, qaCollectionId = data.linkId) + DirectUtils.directToQaCollection(mContext, data.linkText, data.linkId) } else -> { //Utils.toast(mContext, "暂不支持类型:" + data.linkType) diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt index dbd3674f88..13ddbc6e1c 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpQaCategoryAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.gh.base.BaseRecyclerViewHolder +import com.gh.common.util.DirectUtils import com.gh.common.util.MtaHelper import com.gh.common.util.dip2px import com.gh.common.util.goneIf @@ -45,7 +46,7 @@ class HelpQaCategoryAdapter(val context: Context, val mQaCollectionId: String?) adapter = HelpQaAdapter(context, helpCategoryEntity, mQaCollectionId) } holder.binding.categoryMore.setOnClickListener { - QaActivity.startActivity(context, helpCategoryEntity.name, helpCategoryEntity.id, "") + DirectUtils.directToQa(context, helpCategoryEntity.name, helpCategoryEntity.id) if (!mQaCollectionId.isNullOrEmpty()) { MtaHelper.onEvent("QA", "QA合集点击", "点击更多+${helpCategoryEntity.name}") } else { diff --git a/assistant_flutter b/assistant_flutter index eb14000828..069f469072 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit eb14000828e28e2fa897b15d97e42a8cfdb06de3 +Subproject commit 069f46907266f65fbed0f36dab00881d227d0bc3 From 149448c04ca7574871f1a1ceaaf74fa70fbe4bbc Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 8 Sep 2021 09:57:13 +0800 Subject: [PATCH 23/89] =?UTF-8?q?Deleted=20=E7=A7=BB=E9=99=A4QaActivity?= =?UTF-8?q?=E7=9A=84startActivity=E6=96=B9=E6=B3=95(=E5=B7=B2=E5=BC=83?= =?UTF-8?q?=E7=94=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/gamecenter/QaActivity.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/QaActivity.kt b/app/src/main/java/com/gh/gamecenter/QaActivity.kt index 2a96aecdf2..d0818a689c 100644 --- a/app/src/main/java/com/gh/gamecenter/QaActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/QaActivity.kt @@ -21,10 +21,6 @@ class QaActivity : NormalActivity() { args.putString(EntranceUtils.KEY_NAVIGATION_TITLE, navigationTitle) return getTargetIntent(context, QaActivity::class.java, HelpContainerFragment::class.java, args) } - - fun startActivity(context: Context, navigationTitle: String, qaId: String? = null, qaCollectionId: String? = null) { - context.startActivity(getIntent(context, navigationTitle, qaId, qaCollectionId)) - } } override fun provideNormalIntent(): Intent { From 3791dfd558c3e55beeb714a903f574fa4b89cc5d Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 10 Sep 2021 18:20:34 +0800 Subject: [PATCH 24/89] =?UTF-8?q?Updated=20=E4=BD=BF=E7=94=A8Fresco?= =?UTF-8?q?=E4=BB=A3=E6=9B=BFGlide=E5=8A=A0=E8=BD=BDFlutter=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 069f469072..270953a258 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 069f46907266f65fbed0f36dab00881d227d0bc3 +Subproject commit 270953a2582dc8e2e04678e71fa277ebbe7295d3 From bc18301dc1a92ea40e8a087efecd2f5dc48dd9da Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 13 Sep 2021 18:37:08 +0800 Subject: [PATCH 25/89] =?UTF-8?q?Fixed=20=E4=BF=AE=E5=A4=8D=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=8E=AF=E5=A2=83=E4=B8=8B=E5=B8=AE=E5=8A=A9=E4=B8=8E?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E6=8E=A5=E5=8F=A3=E6=8A=A5=E9=94=99=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20Added=20=E6=B7=BB=E5=8A=A0=E9=98=BF=E9=87=8C?= =?UTF-8?q?=E4=BA=91=E9=95=9C=E5=83=8F=EF=BC=8C=E5=8A=A0=E9=80=9F=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E5=8A=A0=E8=BD=BD=20Fixed=20Flutter=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E7=9A=84=E6=96=B9=E6=B3=95=E5=90=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98=20Added=20=E5=B0=86Flutter=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E8=B5=84=E6=BA=90=E5=8A=A0=E5=85=A5=E6=B7=B7?= =?UTF-8?q?=E6=B7=86=E7=99=BD=E5=90=8D=E5=8D=95=20Added=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0Flutter=E6=A8=A1=E5=9D=97=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=B7=B7=E6=B7=86=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +++++++++-- app/proguard-rules.txt | 26 ++++++++++++++++++++++++-- assistant_flutter | 2 +- build.gradle | 9 +++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c1846fa41d..3475131677 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,6 @@ apply plugin: 'AndResGuard' import groovy.xml.XmlUtil -//aspectjx { exclude 'androidx', 'com.google', 'com.gh.gamecenter' } - android { androidExtensions { @@ -432,6 +430,7 @@ andResGuard { mergeDuplicatedRes = true whiteList = [ "R.drawable.icon", + "R.drawable.ic_bar_back", "R.drawable.bg_notification_answer_style_1", "R.drawable.bg_notification_answer_style_2", "R.drawable.bg_notification_article_style_1", @@ -480,6 +479,14 @@ andResGuard { "R.drawable.ic_quick_login_uncheck", "R.anim.anim_auth_in", "R.anim.anim_auth_out", + "R.drawable.help_search_delete", + "R.drawable.suggest_type_normal", + "R.drawable.suggest_type_crash", + "R.drawable.suggest_type_game_question", + "R.drawable.suggest_type_game_collect", + "R.drawable.suggest_type_function_suggest", + "R.drawable.suggest_type_article_collect", + "R.drawable.suggest_type_copyright" ] compressFilePattern = [ "*.png", diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 4f9da45c34..d75b52b7cc 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -142,8 +142,30 @@ } # Flutter模块 --keep public class com.gh.common.util.DirectUtils { +-keep class com.gh.common.util.DirectUtils { public static void directToQa(...); public static void directToQaCollection(...); public static void directToFeedback(...); -} \ No newline at end of file +} +-keep class com.halo.assistant.HaloApp { + private void initFlutterBoost(); + private void initFlutterDyncExtension(); + public java.lang.String getOAID(); + public java.lang.String getChannel(); + public java.lang.String getUserAgent(); +} +-keep class com.gh.common.DefaultUrlHandler {*;} +-keep class com.gh.gamecenter.R {*;} +-keep class com.gh.gamecenter.BuildConfig {*;} +-keep class com.gh.common.util.TimestampUtils { + public static java.lang.String addTimestamp(java.lang.String); +} +-keep class com.gh.gamecenter.manager.UserManager { + public java.lang.String getDeviceId(); + public java.lang.String getToken(); + public static com.gh.gamecenter.manager.UserManager getInstance(); +} +-keep class com.gh.common.exposure.meta.MetaUtil { + public static java.lang.String getBase64EncodedIMEI(); +} + diff --git a/assistant_flutter b/assistant_flutter index 270953a258..4ed61085eb 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 270953a2582dc8e2e04678e71fa277ebbe7295d3 +Subproject commit 4ed61085eb1691c53eda80d9fffeb89e45ec743f diff --git a/build.gradle b/build.gradle index 2ad15b227e..5f02ccb5b6 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,11 @@ buildscript { ext.kotlin_version = '1.4.20' repositories { + // 阿里云仓库 + maven { url 'https://maven.aliyun.com/repository/central' } + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } google() jcenter() mavenCentral() @@ -28,6 +33,10 @@ buildscript { allprojects { repositories { + // 阿里云仓库 + maven { url 'https://maven.aliyun.com/repository/central' } + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } google() jcenter() mavenCentral() From c278359909c2b39643b83262687bd205f5db9551 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 14 Sep 2021 18:40:15 +0800 Subject: [PATCH 26/89] =?UTF-8?q?Fixed=20=E8=A7=A3=E5=86=B3Flutter?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=8A=A0=E8=BD=BD=E6=85=A2=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98(=E5=BA=93=E4=B8=8B=E8=BD=BD=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98)=20Fixed=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E7=9A=84Flutter=E8=B5=84=E6=BA=90=E6=B7=B7?= =?UTF-8?q?=E6=B7=86=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + build.gradle | 12 +++--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3475131677..09f1541f0b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -431,6 +431,7 @@ andResGuard { whiteList = [ "R.drawable.icon", "R.drawable.ic_bar_back", + "R.drawable.toolbar_search_icon", "R.drawable.bg_notification_answer_style_1", "R.drawable.bg_notification_answer_style_2", "R.drawable.bg_notification_article_style_1", diff --git a/build.gradle b/build.gradle index 5f02ccb5b6..c13c0a9fff 100644 --- a/build.gradle +++ b/build.gradle @@ -4,13 +4,9 @@ apply from: 'dependencies.gradle' buildscript { ext.kotlin_version = '1.4.20' - + ext.flutter_io = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com" repositories { // 阿里云仓库 - maven { url 'https://maven.aliyun.com/repository/central' } - maven { url 'https://maven.aliyun.com/repository/public' } - maven { url 'https://maven.aliyun.com/repository/google' } - maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } google() jcenter() mavenCentral() @@ -33,14 +29,12 @@ buildscript { allprojects { repositories { - // 阿里云仓库 - maven { url 'https://maven.aliyun.com/repository/central' } - maven { url 'https://maven.aliyun.com/repository/public' } - maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://storage.flutter-io.cn/download.flutter.io' } google() jcenter() mavenCentral() maven { url 'https://jitpack.io' } + maven { url "$flutter_io/download.flutter.io" }// Flutter maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK maven { url 'https://dl.bintray.com/aweme-open-sdk-team/public' } //tiktokSDK maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } From 05d95259e2e2aeb33038c990135978ba5953e1d9 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 14 Sep 2021 18:54:55 +0800 Subject: [PATCH 27/89] =?UTF-8?q?Deleted=20=E7=A7=BB=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E7=9A=84build.gradle=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- build.gradle | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/assistant_flutter b/assistant_flutter index 4ed61085eb..d2ffa777db 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 4ed61085eb1691c53eda80d9fffeb89e45ec743f +Subproject commit d2ffa777dbbd9e06b6d5491867b5192da3b79fbf diff --git a/build.gradle b/build.gradle index c13c0a9fff..5b1c368ed0 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,6 @@ buildscript { allprojects { repositories { - maven { url 'https://storage.flutter-io.cn/download.flutter.io' } google() jcenter() mavenCentral() From ee0a3a9d054e8246fcb6605ecac0d71487282904 Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 15 Sep 2021 19:58:56 +0800 Subject: [PATCH 28/89] =?UTF-8?q?Updated=20=E5=B0=86Flutter=E8=B0=83?= =?UTF-8?q?=E7=94=A8Native=E6=96=B9=E6=B3=95=E7=9A=84=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=20Fixed=20=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E9=A1=B5=E8=83=8C=E6=99=AF=E8=89=B2=E4=B8=8D=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 +- .../flutter/FlutterBoostRouteServiceImpl.java | 39 +++++++++++ .../gh/flutter/FlutterModuleServiceImpl.java | 70 +++++++++++++++++++ .../main/java/com/halo/assistant/HaloApp.java | 17 +---- build.gradle | 1 + 5 files changed, 115 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java create mode 100644 app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java diff --git a/app/build.gradle b/app/build.gradle index 09f1541f0b..c6b10338dc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'me.ele.lancet' +apply plugin: 'app-joint' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' @@ -349,6 +350,8 @@ dependencies { implementation 'io.github.sinaweibosdk:core:11.6.0@aar' + implementation "io.github.prototypez:app-joint-core:1.7"// 面向接口编程 + implementation project(':libraries:LGLibrary') // implementation project(':libraries:MTA') implementation project(':libraries:QQShare') @@ -359,7 +362,7 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation project(':assistant_flutter_hook') + implementation project(':assistant_flutter') } File propFile = file('sign.properties') if (propFile.exists()) { diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java new file mode 100644 index 0000000000..ae948ebd7c --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java @@ -0,0 +1,39 @@ +package com.gh.flutter; + +import android.content.Context; + +import com.gh.common.DefaultUrlHandler; +import com.halo.assistant.flutter.service.FlutterBoostRouteService; + +import java.util.Map; + +import io.github.prototypez.appjoint.core.ServiceProvider; + +@ServiceProvider +public class FlutterBoostRouteServiceImpl implements FlutterBoostRouteService { + + @Override + public void handleHelpDetail(Context context, Map params) { + StringBuilder builder = new StringBuilder("ghzhushou://help_detail"); + String url = (String) params.get("url"); + if(url != null && !url.isEmpty()) { + builder.append("?url=").append(params.get("url")); + } else { + builder.append("?id=").append(params.get("id")); + builder.append("&name=").append(params.get("name")); + builder.append("&collection_id=").append(params.get("collection_id")); + } + DefaultUrlHandler.interceptUrl(context, builder.toString(), ""); + } + + @Override + public void handleHelpSuggestion(Context context, Map params) { + String url = "ghzhushou://help_suggestion?type=" + params.get("type"); + DefaultUrlHandler.interceptUrl(context, url, ""); + } + + @Override + public void handleQQGroup(Context context, Map params) { + + } +} diff --git a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java b/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java new file mode 100644 index 0000000000..feb277a48e --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java @@ -0,0 +1,70 @@ +package com.gh.flutter; + +import com.gh.common.constant.Config; +import com.gh.common.exposure.meta.MetaUtil; +import com.gh.common.util.TimestampUtils; +import com.gh.gamecenter.BuildConfig; +import com.gh.gamecenter.entity.SettingsEntity; +import com.gh.gamecenter.manager.UserManager; +import com.halo.assistant.HaloApp; +import com.halo.assistant.flutter.service.FlutterModuleService; + +import io.github.prototypez.appjoint.core.ServiceProvider; + +@ServiceProvider +public class FlutterModuleServiceImpl implements FlutterModuleService { + + @Override + public String getToken() { + return UserManager.getInstance().getToken(); + } + + @Override + public String getUserAgent() { + return HaloApp.getInstance().getUserAgent(); + } + + @Override + public String getChannel() { + return HaloApp.getInstance().getChannel(); + } + + @Override + public String addTimeStamp(String url) { + return TimestampUtils.addTimestamp(url); + } + + @Override + public String getOAID() { + return HaloApp.getInstance().getOAID(); + } + + @Override + public String getDeviceId() { + return UserManager.getInstance().getDeviceId(); + } + + @Override + public String getHost() { + return BuildConfig.API_HOST; + } + + @Override + public String getQQun() { + SettingsEntity settings = Config.getSettings(); + if (settings != null) { +// settings.? + } + return ""; + } + + @Override + public String getQQunKey() { + return null; + } + + @Override + public String getBase64EncodedIMEI() { + return MetaUtil.getBase64EncodedIMEI(); + } +} diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index a0bbd4e4b0..229533b82c 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -55,6 +55,7 @@ import com.squareup.picasso.Picasso; import java.lang.reflect.Method; +import io.github.prototypez.appjoint.core.AppSpec; import io.reactivex.plugins.RxJavaPlugins; import tv.danmaku.ijk.media.exo2.Exo2PlayerManager; import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager; @@ -196,10 +197,6 @@ public class HaloApp extends MultiDexApplication { } registerActivityLifecycleCallbacks(new GlobalActivityLifecycleObserver()); - - // Flutter模块初始化 - initFlutterBoost(); - initFlutterDyncExtension(); } /** @@ -333,18 +330,6 @@ public class HaloApp extends MultiDexApplication { }); } - /** - * FlutterBoost初始化,通过Lancet注入代码 - * 请确保该方法名与{@link com.halo.assistant.flutter.hook.FlutterBoostHook}对应的方法名保持一致 - */ - private void initFlutterBoost() { } - - /** - * 使用FlutterDynamicChannel接入Native方法,通过Lancet注入代码 - * 请确保该方法名与{@link com.halo.assistant.flutter.hook.FlutterDynamicChannelHook}对应的方法名保持一致 - */ - private void initFlutterDyncExtension() { } - public boolean isPostInitialized() { return mIsPostInitialized; } diff --git a/build.gradle b/build.gradle index 5b1c368ed0..22ced67abc 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ buildscript { // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' + classpath 'io.github.prototypez:app-joint:1.7'// 面向接口编程 } } From f2501eeb3b4e6676d6059d94a27ee851818609de Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 16 Sep 2021 17:41:29 +0800 Subject: [PATCH 29/89] =?UTF-8?q?Fixed=20=E6=84=8F=E8=A7=81=E5=8F=8D?= =?UTF-8?q?=E9=A6=88Q=E7=BE=A4=E7=82=B9=E5=87=BB=E6=97=A0=E5=8F=8D?= =?UTF-8?q?=E5=BA=94=20Fixed=20=E5=85=A8=E7=89=88=E6=9C=AC=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E8=B7=B3=E8=BD=AC=E9=BB=91=E5=B1=8F=20Fixed=20?= =?UTF-8?q?=E6=84=8F=E8=A7=81=E5=8F=8D=E9=A6=88Q=E7=BE=A4=E8=A2=AB?= =?UTF-8?q?=E5=86=99=E6=AD=BB=20Fixed=20=E6=90=9C=E7=B4=A2=E6=97=A0?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E7=BC=BA=E7=9C=81=E5=9B=BE=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=20Updated=20=E4=BD=BF=E7=94=A8Aop=E7=9A=84=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E6=B3=A8=E5=85=A5Flutter=20Module=E4=BB=A3=E7=A0=81=E4=BB=A3?= =?UTF-8?q?=E6=9B=BF=E9=9D=A2=E5=90=91=E6=8E=A5=E5=8F=A3=E7=BC=96=E7=A8=8B?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 +- app/proguard-rules.txt | 21 ---- .../flutter/FlutterBoostRouteServiceImpl.java | 39 -------- .../FlutterBoostRouteServiceImplAop.java | 47 +++++++++ .../gh/flutter/FlutterModuleServiceImpl.java | 70 ------------- .../flutter/FlutterModuleServiceImplAop.java | 99 +++++++++++++++++++ .../main/java/com/halo/assistant/HaloApp.java | 2 - assistant_flutter | 2 +- build.gradle | 1 - 9 files changed, 150 insertions(+), 138 deletions(-) delete mode 100644 app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java create mode 100644 app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java delete mode 100644 app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java create mode 100644 app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java diff --git a/app/build.gradle b/app/build.gradle index c6b10338dc..7e6835af58 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'me.ele.lancet' -apply plugin: 'app-joint' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' @@ -350,8 +349,6 @@ dependencies { implementation 'io.github.sinaweibosdk:core:11.6.0@aar' - implementation "io.github.prototypez:app-joint-core:1.7"// 面向接口编程 - implementation project(':libraries:LGLibrary') // implementation project(':libraries:MTA') implementation project(':libraries:QQShare') @@ -363,6 +360,7 @@ dependencies { // Flutter模块 implementation project(':assistant_flutter') + compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') if (propFile.exists()) { @@ -490,7 +488,8 @@ andResGuard { "R.drawable.suggest_type_game_collect", "R.drawable.suggest_type_function_suggest", "R.drawable.suggest_type_article_collect", - "R.drawable.suggest_type_copyright" + "R.drawable.suggest_type_copyright", + "R.drawable.help_result_empty" ] compressFilePattern = [ "*.png", diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index d75b52b7cc..3c478548a1 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -147,25 +147,4 @@ public static void directToQaCollection(...); public static void directToFeedback(...); } --keep class com.halo.assistant.HaloApp { - private void initFlutterBoost(); - private void initFlutterDyncExtension(); - public java.lang.String getOAID(); - public java.lang.String getChannel(); - public java.lang.String getUserAgent(); -} --keep class com.gh.common.DefaultUrlHandler {*;} --keep class com.gh.gamecenter.R {*;} --keep class com.gh.gamecenter.BuildConfig {*;} --keep class com.gh.common.util.TimestampUtils { - public static java.lang.String addTimestamp(java.lang.String); -} --keep class com.gh.gamecenter.manager.UserManager { - public java.lang.String getDeviceId(); - public java.lang.String getToken(); - public static com.gh.gamecenter.manager.UserManager getInstance(); -} --keep class com.gh.common.exposure.meta.MetaUtil { - public static java.lang.String getBase64EncodedIMEI(); -} diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java deleted file mode 100644 index ae948ebd7c..0000000000 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gh.flutter; - -import android.content.Context; - -import com.gh.common.DefaultUrlHandler; -import com.halo.assistant.flutter.service.FlutterBoostRouteService; - -import java.util.Map; - -import io.github.prototypez.appjoint.core.ServiceProvider; - -@ServiceProvider -public class FlutterBoostRouteServiceImpl implements FlutterBoostRouteService { - - @Override - public void handleHelpDetail(Context context, Map params) { - StringBuilder builder = new StringBuilder("ghzhushou://help_detail"); - String url = (String) params.get("url"); - if(url != null && !url.isEmpty()) { - builder.append("?url=").append(params.get("url")); - } else { - builder.append("?id=").append(params.get("id")); - builder.append("&name=").append(params.get("name")); - builder.append("&collection_id=").append(params.get("collection_id")); - } - DefaultUrlHandler.interceptUrl(context, builder.toString(), ""); - } - - @Override - public void handleHelpSuggestion(Context context, Map params) { - String url = "ghzhushou://help_suggestion?type=" + params.get("type"); - DefaultUrlHandler.interceptUrl(context, url, ""); - } - - @Override - public void handleQQGroup(Context context, Map params) { - - } -} diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java new file mode 100644 index 0000000000..d9674bdb9a --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -0,0 +1,47 @@ +package com.gh.flutter; + +import android.content.Context; + +import com.gh.common.DefaultUrlHandler; +import com.gh.common.util.EntranceUtils; + +import java.util.Map; + +import me.ele.lancet.base.annotations.Insert; +import me.ele.lancet.base.annotations.TargetClass; + +public class FlutterBoostRouteServiceImplAop { + private static final String TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterBoostRouteServiceImpl"; + private static final String METHOD_HANDLE_HELP_DETAIL = "handleHelpDetail"; + private static final String METHOD_HANDLE_HELP_SUGGESTION = "handleHelpSuggestion"; + private static final String METHOD_HANDLE_QQ_GROUP = "handleQQGroup"; + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_HELP_DETAIL) + public void handleHelpDetail(Context context, Map params) { + StringBuilder builder = new StringBuilder("ghzhushou://" + EntranceUtils.HOST_HELP_DETAIL); + String url = (String) params.get("url"); + if(url != null && !url.isEmpty()) { + builder.append("?url=").append(params.get("url")); + } else { + builder.append("?id=").append(params.get("id")); + builder.append("&name=").append(params.get("name")); + builder.append("&collection_id=").append(params.get("collection_id")); + } + DefaultUrlHandler.interceptUrl(context, builder.toString(), ""); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_HELP_SUGGESTION) + public void handleHelpSuggestion(Context context, Map params) { + String url = "ghzhushou://" + EntranceUtils.HOST_HELP_SUGGESTION + "?type=" + params.get("type"); + DefaultUrlHandler.interceptUrl(context, url, ""); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_QQ_GROUP) + public void handleQQGroup(Context context, Map params) { + String url = "ghzhushou://" + EntranceUtils.HOST_QQ_QUN + "?key=" + params.get("key"); + DefaultUrlHandler.interceptUrl(context, url, ""); + } +} diff --git a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java b/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java deleted file mode 100644 index feb277a48e..0000000000 --- a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.gh.flutter; - -import com.gh.common.constant.Config; -import com.gh.common.exposure.meta.MetaUtil; -import com.gh.common.util.TimestampUtils; -import com.gh.gamecenter.BuildConfig; -import com.gh.gamecenter.entity.SettingsEntity; -import com.gh.gamecenter.manager.UserManager; -import com.halo.assistant.HaloApp; -import com.halo.assistant.flutter.service.FlutterModuleService; - -import io.github.prototypez.appjoint.core.ServiceProvider; - -@ServiceProvider -public class FlutterModuleServiceImpl implements FlutterModuleService { - - @Override - public String getToken() { - return UserManager.getInstance().getToken(); - } - - @Override - public String getUserAgent() { - return HaloApp.getInstance().getUserAgent(); - } - - @Override - public String getChannel() { - return HaloApp.getInstance().getChannel(); - } - - @Override - public String addTimeStamp(String url) { - return TimestampUtils.addTimestamp(url); - } - - @Override - public String getOAID() { - return HaloApp.getInstance().getOAID(); - } - - @Override - public String getDeviceId() { - return UserManager.getInstance().getDeviceId(); - } - - @Override - public String getHost() { - return BuildConfig.API_HOST; - } - - @Override - public String getQQun() { - SettingsEntity settings = Config.getSettings(); - if (settings != null) { -// settings.? - } - return ""; - } - - @Override - public String getQQunKey() { - return null; - } - - @Override - public String getBase64EncodedIMEI() { - return MetaUtil.getBase64EncodedIMEI(); - } -} diff --git a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java new file mode 100644 index 0000000000..99ae698c80 --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java @@ -0,0 +1,99 @@ +package com.gh.flutter; + +import android.text.TextUtils; + +import com.gh.common.constant.Config; +import com.gh.common.exposure.meta.MetaUtil; +import com.gh.common.util.TimestampUtils; +import com.gh.gamecenter.BuildConfig; +import com.gh.gamecenter.entity.SettingsEntity; +import com.gh.gamecenter.manager.UserManager; +import com.halo.assistant.HaloApp; + +import me.ele.lancet.base.annotations.Insert; +import me.ele.lancet.base.annotations.TargetClass; + + +public class FlutterModuleServiceImplAop { + private static final String TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterModuleServiceImpl"; + private static final String METHOD_GET_TOKEN = "getToken"; + private static final String METHOD_GET_USER_AGENT = "getUserAgent"; + private static final String METHOD_GET_CHANNEL = "getChannel"; + private static final String METHOD_ADD_TIMESTAMP = "addTimeStamp"; + private static final String METHOD_GET_OAID = "getOAID"; + private static final String METHOD_GET_DEVICE_ID = "getDeviceId"; + private static final String METHOD_GET_HOST = "getHost"; + private static final String METHOD_GET_QQ_QUN = "getQQQun"; + private static final String METHOD_GET_QQ_QUN_KEY = "getQQQunKey"; + private static final String METHOD_GET_BASE64_ENCODED_IMEI = "getBase64EncodedIMEI"; + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_TOKEN) + public String getToken() { + return UserManager.getInstance().getToken(); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_USER_AGENT) + public String getUserAgent() { + return HaloApp.getInstance().getUserAgent(); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_CHANNEL) + public String getChannel() { + return HaloApp.getInstance().getChannel(); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_ADD_TIMESTAMP) + public String addTimeStamp(String url) { + return TimestampUtils.addTimestamp(url); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_OAID) + public String getOAID() { + return HaloApp.getInstance().getOAID(); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_DEVICE_ID) + public String getDeviceId() { + return UserManager.getInstance().getDeviceId(); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_HOST) + public String getHost() { + return BuildConfig.API_HOST; + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_QQ_QUN) + public String getQQQun() { + SettingsEntity mSettings = Config.getSettings(); + if (mSettings != null && mSettings.getSupport() != null && + !TextUtils.isEmpty(mSettings.getSupport().getQQun())) { + return mSettings.getSupport().getQQun(); + } + return "367541038"; + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_QQ_QUN_KEY) + public String getQQQunKey() { + SettingsEntity mSettings = Config.getSettings(); + if (mSettings != null && mSettings.getSupport() != null && + !TextUtils.isEmpty(mSettings.getSupport().getQQunKey())) { + return mSettings.getSupport().getQQunKey(); + } + return "vd754P2_uNUJqDcgX4V-pyXEGZZVH0DE"; + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_BASE64_ENCODED_IMEI) + public String getBase64EncodedIMEI() { + return MetaUtil.getBase64EncodedIMEI(); + } +} diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 229533b82c..868ceacdd8 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -22,7 +22,6 @@ import com.gh.common.constant.Constants; import com.gh.common.exposure.ExposureManager; import com.gh.common.filter.RegionSettingHelper; import com.gh.common.loghub.LoghubUtils; -import com.gh.common.tracker.Tracker; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceUtils; import com.gh.common.util.DownloadNotificationHelper; @@ -55,7 +54,6 @@ import com.squareup.picasso.Picasso; import java.lang.reflect.Method; -import io.github.prototypez.appjoint.core.AppSpec; import io.reactivex.plugins.RxJavaPlugins; import tv.danmaku.ijk.media.exo2.Exo2PlayerManager; import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager; diff --git a/assistant_flutter b/assistant_flutter index d2ffa777db..5298f1d1b5 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit d2ffa777dbbd9e06b6d5491867b5192da3b79fbf +Subproject commit 5298f1d1b5e31fde3a28a52896b482a9828b2572 diff --git a/build.gradle b/build.gradle index 22ced67abc..5b1c368ed0 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,6 @@ buildscript { // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' - classpath 'io.github.prototypez:app-joint:1.7'// 面向接口编程 } } From 5c313ab7ac4ac4ce28e0862c8f79f056c22c4d4d Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 17 Sep 2021 18:52:58 +0800 Subject: [PATCH 30/89] =?UTF-8?q?Fixed=20=E8=A7=A3=E5=86=B3ToolBar?= =?UTF-8?q?=E5=90=8E=E9=80=80=E6=8C=89=E9=92=AE=E9=80=82=E9=85=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20Updated=20=E7=A7=BB=E9=99=A4Flutter=20Debug?= =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 5298f1d1b5..20c53f66f9 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 5298f1d1b5e31fde3a28a52896b482a9828b2572 +Subproject commit 20c53f66f9fedbcb9cc8e937469682c24828ee0f From 6dc097f60f3621956b7d88a41af20f163be35604 Mon Sep 17 00:00:00 2001 From: axen Date: Sat, 18 Sep 2021 12:01:55 +0800 Subject: [PATCH 31/89] =?UTF-8?q?Fixed=20=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E9=97=AE=E9=A2=98=20Fixed=20UI=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 20c53f66f9..eefe687b58 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 20c53f66f9fedbcb9cc8e937469682c24828ee0f +Subproject commit eefe687b581d8ed27fd5746643f60769c6bc2882 From b7dca9b652494f6c3d9d2ca5c508fa42e6f48a0a Mon Sep 17 00:00:00 2001 From: axen Date: Sat, 18 Sep 2021 15:44:50 +0800 Subject: [PATCH 32/89] =?UTF-8?q?Fixed=20=E6=90=9C=E7=B4=A2=E6=A1=86?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E5=A4=8D=E5=88=B6=E7=B2=98=E8=B4=B4=E6=96=87?= =?UTF-8?q?=E5=AD=97=E4=B8=BA=E8=8B=B1=E6=96=87=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20Fixed=20=E6=90=9C=E7=B4=A2=E7=BB=93=E6=9E=9C=E6=97=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=97=B6=E7=82=B9=E5=87=BB=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E6=97=B6=E6=97=A0=E5=8F=8D=E5=BA=94=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?(=E5=BA=94=E8=AF=A5=E8=B7=B3=E8=BD=AC=E5=88=B0=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E9=A1=B5)=20Fixed=20=E6=90=9C=E7=B4=A2=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E5=AD=97=E7=9B=B8=E5=90=8C=E6=97=B6=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=9A=84=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98?= =?UTF-8?q?(=E7=9B=B8=E5=90=8C=E5=85=B3=E9=94=AE=E5=AD=97=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E8=BF=9B=E8=A1=8C=E6=90=9C=E7=B4=A2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index eefe687b58..f3e3011551 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit eefe687b581d8ed27fd5746643f60769c6bc2882 +Subproject commit f3e3011551ef1e4bed64e4c5d137b99567bb5817 From 090b5fe04fe8a2ddde9cfc8a8df07ddfdfc47184 Mon Sep 17 00:00:00 2001 From: axen Date: Sat, 18 Sep 2021 15:49:57 +0800 Subject: [PATCH 33/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index f3e3011551..7b706a8314 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit f3e3011551ef1e4bed64e4c5d137b99567bb5817 +Subproject commit 7b706a8314b9a5fff19fcd36067022b66c108025 From 97e87a9f32b75ecc447e6d72152009e3d13175cf Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 22 Sep 2021 19:34:56 +0800 Subject: [PATCH 34/89] =?UTF-8?q?Fixed=20=E4=BB=8E=E5=8E=9F=E7=94=9F?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=9B=9E=E9=80=80=E5=88=B0Flutter=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E8=BE=93=E5=85=A5=E6=A1=86=E7=B2=98=E8=B4=B4?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=82=B9=E5=87=BB=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 7b706a8314..71405f56a8 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 7b706a8314b9a5fff19fcd36067022b66c108025 +Subproject commit 71405f56a864e7568af4c7dbf1740b0746981407 From 393b747f0eec92a4211f79f3fc03b278a564187d Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 23 Sep 2021 11:58:58 +0800 Subject: [PATCH 35/89] =?UTF-8?q?Updated=20=E4=BC=98=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- settings.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7e6835af58..ca104668a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -359,7 +359,7 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation project(':assistant_flutter') + implementation project(':flutter_hub') compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') diff --git a/settings.gradle b/settings.gradle index dd9f77c04b..72671a45b4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir, - 'assistant_flutter/include_flutter.groovy' + 'assistant_flutter/android/include_flutter.groovy' )) //include ':libraries:im' include ':libraries:LGLibrary' From b583aafa25b5613b359cebbc964cf5ceeeba0b60 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 23 Sep 2021 18:46:51 +0800 Subject: [PATCH 36/89] =?UTF-8?q?Fixed=20=E4=BD=BF=E7=94=A8=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E6=97=A0=E6=90=9C=E7=B4=A2=E7=BB=93=E6=9E=9C=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=EF=BC=8C=E7=82=B9=E5=87=BB=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=97=A0=E5=8F=8D=E5=BA=94=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 71405f56a8..5a49b6bdbb 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 71405f56a864e7568af4c7dbf1740b0746981407 +Subproject commit 5a49b6bdbbaf3f17a1c78286a99bedb4aa68da90 From bbb7904477d8e99c9d0b690dfea86c99c5afa21c Mon Sep 17 00:00:00 2001 From: zengxiangjun Date: Mon, 27 Sep 2021 11:48:02 +0800 Subject: [PATCH 37/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0Flutter?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 5a49b6bdbb..f7eae9761c 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 5a49b6bdbbaf3f17a1c78286a99bedb4aa68da90 +Subproject commit f7eae9761c5486b99cf049f1871f9aebf565d640 From 65aab99639376f43941c873ff6df899daf8e37ef Mon Sep 17 00:00:00 2001 From: zengxiangjun Date: Mon, 27 Sep 2021 12:01:00 +0800 Subject: [PATCH 38/89] =?UTF-8?q?Updated=20=E5=B0=86Flutter=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E5=9C=B0=E5=9D=80=E9=85=8D=E7=BD=AE=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=88=B0dependencies.gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- build.gradle | 1 - dependencies.gradle | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/assistant_flutter b/assistant_flutter index f7eae9761c..3e34bc89cb 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit f7eae9761c5486b99cf049f1871f9aebf565d640 +Subproject commit 3e34bc89cb14952d13688acbe980220019e312ee diff --git a/build.gradle b/build.gradle index 5b1c368ed0..d20bebae76 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,6 @@ apply from: 'dependencies.gradle' buildscript { ext.kotlin_version = '1.4.20' - ext.flutter_io = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com" repositories { // 阿里云仓库 google() diff --git a/dependencies.gradle b/dependencies.gradle index 467566f2d0..2d88608a3e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -113,4 +113,7 @@ ext { shapeOfView = "1.4.7" sentry = "3.2.0" + + flutter_io = System.env.FLUTTER_STORAGE_BASE_URL + ?: "https://storage.googleapis.com" } \ No newline at end of file From ca190c6d574d9c834d276c38ab134708f9d3cbb6 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 27 Sep 2021 16:01:39 +0800 Subject: [PATCH 39/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 3e34bc89cb..97acfdeef7 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 3e34bc89cb14952d13688acbe980220019e312ee +Subproject commit 97acfdeef71517881b7908320041b475f78cf10d From 672b697209286e21e377c41d75996a7a99cb1300 Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 29 Sep 2021 17:51:51 +0800 Subject: [PATCH 40/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=B8=8A=E6=8A=A5=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/flutter/FlutterLogHubServiceImplAop.kt | 44 +++++++++++++++++++ assistant_flutter | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt diff --git a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt new file mode 100644 index 0000000000..cff299543d --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt @@ -0,0 +1,44 @@ +package com.gh.flutter + +import android.util.Log +import com.gh.common.json.JsonObjectBuilder +import com.gh.common.json.json +import com.gh.common.loghub.LoghubUtils +import com.gh.common.tracker.Tracker +import com.gh.common.util.LogUtils +import me.ele.lancet.base.annotations.Insert +import me.ele.lancet.base.annotations.TargetClass +import org.json.JSONObject + +class FlutterLogHubServiceImplAop { + + companion object { + private const val TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterLogHubServiceImpl" + private const val METHOD_LOG = "log" + fun build(event: String): JSONObject { + return json { + "event" to event + "meta" to LogUtils.getMetaObject() + "launch_id" to Tracker.launchId + "session_id" to Tracker.sessionId + "timestamp" to System.currentTimeMillis() / 1000 + } + } + } + + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_LOG) + fun log(event: String, store: String, extras: Map?) { + val json = build(event) + if (!extras.isNullOrEmpty()) { + for ((key, value) in extras) { + json.put(key, value) + } + } + Log.d("FlutterLogHub", "event: $event") + Log.d("FlutterLogHub", "store: $store") + Log.d("FlutterLogHub", "json: $json") +// LoghubUtils.log(json, store, false) + } +} \ No newline at end of file diff --git a/assistant_flutter b/assistant_flutter index 97acfdeef7..b1a30970b1 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 97acfdeef71517881b7908320041b475f78cf10d +Subproject commit b1a30970b13a1bae736badcf07b9da6e9b6e7973 From b0e8db6e0efaf318b9f5d50cd050d95174ffa8d2 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 30 Sep 2021 11:57:57 +0800 Subject: [PATCH 41/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index b1a30970b1..7340198def 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit b1a30970b13a1bae736badcf07b9da6e9b6e7973 +Subproject commit 7340198def65a768935d821a7bad425e58de19bc From 4915f994121e4aa4ab385f66385739ab26cf410d Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 30 Sep 2021 15:03:40 +0800 Subject: [PATCH 42/89] =?UTF-8?q?Deleted=20=E7=A7=BB=E9=99=A4=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BB=A3=E7=A0=81=20Added=20=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/common/DefaultUrlHandler.kt | 2 +- .../java/com/gh/flutter/FlutterLogHubServiceImplAop.kt | 8 ++------ assistant_flutter | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 47c0beaaaa..ecbe600372 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -355,7 +355,7 @@ object DefaultUrlHandler { val id = uri.getQueryParameter("id") val name = uri.getQueryParameter("name") val qaCollectionId = uri.getQueryParameter("collection_id") - context.startActivity(WebActivity.getIntent(context, "$url$id", name, true, if (!qaCollectionId.isNullOrEmpty()) 0 else 1)) + context.startActivity(WebActivity.getIntent(context, "$url$id", name, true, !qaCollectionId.isNullOrEmpty())) } } diff --git a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt index cff299543d..50a5b140ee 100644 --- a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt +++ b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt @@ -31,14 +31,10 @@ class FlutterLogHubServiceImplAop { @Insert(METHOD_LOG) fun log(event: String, store: String, extras: Map?) { val json = build(event) - if (!extras.isNullOrEmpty()) { - for ((key, value) in extras) { - json.put(key, value) - } - } + if (!extras.isNullOrEmpty()) extras.forEach { json.put(it.key, it.value) } Log.d("FlutterLogHub", "event: $event") Log.d("FlutterLogHub", "store: $store") Log.d("FlutterLogHub", "json: $json") -// LoghubUtils.log(json, store, false) + LoghubUtils.log(json, store, false) } } \ No newline at end of file diff --git a/assistant_flutter b/assistant_flutter index 7340198def..29991001ee 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 7340198def65a768935d821a7bad425e58de19bc +Subproject commit 29991001ee2bca823d34b9253cd9766c6ab3d352 From 5f131848e7b50534181cd51ff931d09992e88962 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 30 Sep 2021 17:40:48 +0800 Subject: [PATCH 43/89] =?UTF-8?q?Updated=20UI=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 29991001ee..de1c6155f3 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 29991001ee2bca823d34b9253cd9766c6ab3d352 +Subproject commit de1c6155f3e3a54a264013464c4110ca5ed0d247 From 4bd93ad9584f0526b3f9e4b8052933cb6761bb60 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 8 Oct 2021 09:46:51 +0800 Subject: [PATCH 44/89] =?UTF-8?q?Fixed=20=E5=8F=8D=E9=A6=88=E9=A1=B5?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=B8=85=E7=A9=BA=E6=8C=89=E9=92=AE=E4=BC=9A?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E5=88=B7=E6=96=B0=E7=95=8C=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index de1c6155f3..1981b5aa5f 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit de1c6155f3e3a54a264013464c4110ca5ed0d247 +Subproject commit 1981b5aa5f3cde86dd862dada79e37e6acfff5d8 From ac852c0484f5ddcc58272d6a45b2afc6a7f0b8fd Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 8 Oct 2021 10:33:13 +0800 Subject: [PATCH 45/89] =?UTF-8?q?Deleted=20=E5=88=A0=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 1981b5aa5f..527b7edf52 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 1981b5aa5f3cde86dd862dada79e37e6acfff5d8 +Subproject commit 527b7edf5222634aef1b977cf3b8a5ccdcbfd7a8 From aaffbb376cfb795e8327bfc11307e0ac9023f335 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 8 Oct 2021 13:12:11 +0800 Subject: [PATCH 46/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E9=A1=B5=E3=80=81QA=E9=A1=B5=E5=92=8CQA=E9=9B=86?= =?UTF-8?q?=E5=90=88=E9=A1=B5=E6=90=9C=E7=B4=A2=E5=86=85=E5=AE=B9=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=9A=84toast=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 527b7edf52..b85eeda8e4 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 527b7edf5222634aef1b977cf3b8a5ccdcbfd7a8 +Subproject commit b85eeda8e4bb126fd618cdbd3d9fc3862b0021b9 From 70acea8e92c1c4b76dec03889681e69bbaf575f1 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 11 Oct 2021 10:56:33 +0800 Subject: [PATCH 47/89] =?UTF-8?q?Updated=20=E4=BC=98=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E6=95=B4Flutter=E9=A1=B9=E7=9B=AE=E6=9E=B6=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0Flutter=E9=A1=B9=E7=9B=AE=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index b85eeda8e4..06905b8c4e 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit b85eeda8e4bb126fd618cdbd3d9fc3862b0021b9 +Subproject commit 06905b8c4ebdb67bdd0def09c7419dd56d67d8f7 From ebb87962acba23add7c88d8df220e1e8c5e03430 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 14 Oct 2021 09:44:06 +0800 Subject: [PATCH 48/89] =?UTF-8?q?Updated=20=E6=B8=B8=E6=88=8F=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=A8=A1=E5=9D=97=E6=96=87=E6=A1=A3=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=E6=94=AF=E6=8C=81=EF=BC=8C=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=92=8C=E8=B7=AF=E7=94=B1=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 06905b8c4e..23746b209f 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 06905b8c4ebdb67bdd0def09c7419dd56d67d8f7 +Subproject commit 23746b209f51bb590af71d5479d63534c22bd5f3 From 5a2b997693d41f494d6ac40dce9846312d8abdad Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 14 Oct 2021 09:50:05 +0800 Subject: [PATCH 49/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 23746b209f..098c06a41e 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 23746b209f51bb590af71d5479d63534c22bd5f3 +Subproject commit 098c06a41ed7347916a8c354c748681c0b57e11a From 924ef2a7277826801ec115378f97b45a5c398fbf Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 14:21:29 +0800 Subject: [PATCH 50/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=8A=A8=E6=80=81=E3=80=81=E6=88=91=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E6=B3=A8=E8=B7=AF=E7=94=B1=20Updated=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=96=B0=E5=A2=9E=E8=B5=84=E6=BA=90=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/common/util/DirectUtils.kt | 11 ++++++++++- .../com/gh/gamecenter/forum/home/WelfaresAdapter.kt | 2 +- .../gh/gamecenter/personal/PersonalFunctionAdapter.kt | 2 +- assistant_flutter | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index 825a536379..247736eb73 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -1366,7 +1366,7 @@ object DirectUtils { /** * 跳转至使用帮助与反馈 * @param position 使用帮助:[HelpAndFeedbackActivity.HELP_ITEM],意见反馈:[HelpAndFeedbackActivity.SUGGESTION_ITEM] - * 引入assistant_flutter_hook模块后,该方法会被Hook为启动Flutter界面 + * 请不要随意修改方法名,引入Flutter模块后该方法会被Hook */ @JvmStatic fun directToHelpAndFeedback(context: Context, position: Int = HelpAndFeedbackActivity.HELP_ITEM) { @@ -1648,4 +1648,13 @@ object DirectUtils { bundle.putString(KEY_COLLECTION_ID, collectionId) jumpActivity(context, bundle) } + + /** + * 跳转到游戏动态 + * 请不要随意修改方法名,引入Flutter模块后该方法会被Hook + */ + @JvmStatic + fun directToConcernInfo(context: Context) { + context.startActivity(ConcernInfoActivity.getIntent(context)); + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt b/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt index a8492f62cc..a10ceab298 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt @@ -42,7 +42,7 @@ class WelfaresAdapter(context: Context, "游戏动态" -> { NewLogUtils.logForumPageEvent("click_forum_game_general") CheckLoginUtils.checkLogin(mContext, "社区-论坛:游戏动态") { - mContext.startActivity(ConcernInfoActivity.getIntent(mContext)) + DirectUtils.directToConcernInfo(mContext) } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt index 4c9d55a18e..623b7478ed 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt @@ -219,7 +219,7 @@ class PersonalFunctionAdapter(val context: Context, val groupName: String, var m "游戏动态" -> { if (UserManager.getInstance().isLoggedIn) { DataCollectionUtils.uploadClick(context, "游戏动态", "发现") - context.startActivity(ConcernInfoActivity.getIntent(context)) + DirectUtils.directToConcernInfo(context) } else { MtaHelper.onEvent("我的光环_新", "功能入口-跳转登录", "游戏动态") CheckLoginUtils.checkLogin(context, "我的光环-游戏动态") { } diff --git a/assistant_flutter b/assistant_flutter index 098c06a41e..f5cbff437b 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 098c06a41ed7347916a8c354c748681c0b57e11a +Subproject commit f5cbff437ba89d679716b741201321f66c538c32 From 84dba2036c6fca2a61f14900830ebb5abbfdfc8c Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 14:36:38 +0800 Subject: [PATCH 51/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=20Added=20=E6=96=B0=E5=A2=9E=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index f5cbff437b..abe9ea327d 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit f5cbff437ba89d679716b741201321f66c538c32 +Subproject commit abe9ea327d4a4134472bcd41ee5dd856e2937118 From 433df3bebde6c339808b3e1af5d5e0228df4cec2 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 14:49:31 +0800 Subject: [PATCH 52/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index abe9ea327d..bb4c40c32b 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit abe9ea327d4a4134472bcd41ee5dd856e2937118 +Subproject commit bb4c40c32bb93216c4fb35f5f7271ee3acddda3d From 298b7af692d4dcc169430d6f69495f4de8efcf3d Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 14:56:38 +0800 Subject: [PATCH 53/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index bb4c40c32b..eca3b67af9 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit bb4c40c32bb93216c4fb35f5f7271ee3acddda3d +Subproject commit eca3b67af97f6d09504fc3311155ab2cdc7e0ba1 From d6604ff2c90036e559b9514485f6045d59af82ab Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 14:59:31 +0800 Subject: [PATCH 54/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index eca3b67af9..fb48027840 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit eca3b67af97f6d09504fc3311155ab2cdc7e0ba1 +Subproject commit fb480278403f480af8f790e7ed8937786557e317 From 81873bd898d36534ab137adb7de2f61156a2953c Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 15 Oct 2021 15:01:26 +0800 Subject: [PATCH 55/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index fb48027840..07f74229a8 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit fb480278403f480af8f790e7ed8937786557e317 +Subproject commit 07f74229a868914a41726fc845d118cddfe1af34 From 2811e219111cd5e25181e9c828bb32cbec527dc7 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 18 Oct 2021 16:33:49 +0800 Subject: [PATCH 56/89] =?UTF-8?q?Updated=20=E5=B0=86AOP=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=BF=81=E7=A7=BB=E5=88=B0Flutter=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=20Fixed=20=E9=A1=B9=E7=9B=AE=E7=83=AD?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98=20Update?= =?UTF-8?q?d=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3=20Updated=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java | 2 +- ...eServiceImplAop.java => FlutterContextServiceImplAop.java} | 4 ++-- .../main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt | 2 +- assistant_flutter | 2 +- settings.gradle | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename app/src/main/java/com/gh/flutter/{FlutterModuleServiceImplAop.java => FlutterContextServiceImplAop.java} (96%) diff --git a/app/build.gradle b/app/build.gradle index 86648d6a25..c5674a3f12 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -357,7 +357,7 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation project(':flutter_hub') + implementation project(':flutter') compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index d9674bdb9a..da59659e60 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -11,7 +11,7 @@ import me.ele.lancet.base.annotations.Insert; import me.ele.lancet.base.annotations.TargetClass; public class FlutterBoostRouteServiceImplAop { - private static final String TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterBoostRouteServiceImpl"; + private static final String TARGET_CLASS = "com.halo.assistant.flutter.messenger.service.FlutterBoostRouteServiceImpl"; private static final String METHOD_HANDLE_HELP_DETAIL = "handleHelpDetail"; private static final String METHOD_HANDLE_HELP_SUGGESTION = "handleHelpSuggestion"; private static final String METHOD_HANDLE_QQ_GROUP = "handleQQGroup"; diff --git a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java similarity index 96% rename from app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java rename to app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java index 99ae698c80..60e8d54ffe 100644 --- a/app/src/main/java/com/gh/flutter/FlutterModuleServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java @@ -14,8 +14,8 @@ import me.ele.lancet.base.annotations.Insert; import me.ele.lancet.base.annotations.TargetClass; -public class FlutterModuleServiceImplAop { - private static final String TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterModuleServiceImpl"; +public class FlutterContextServiceImplAop { + private static final String TARGET_CLASS = "com.halo.assistant.flutter.messenger.service.FlutterContextServiceImpl"; private static final String METHOD_GET_TOKEN = "getToken"; private static final String METHOD_GET_USER_AGENT = "getUserAgent"; private static final String METHOD_GET_CHANNEL = "getChannel"; diff --git a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt index 50a5b140ee..0649c4b859 100644 --- a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt +++ b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt @@ -13,7 +13,7 @@ import org.json.JSONObject class FlutterLogHubServiceImplAop { companion object { - private const val TARGET_CLASS = "com.halo.assistant.flutter.service.FlutterLogHubServiceImpl" + private const val TARGET_CLASS = "com.halo.assistant.flutter.messenger.service.FlutterLogHubServiceImpl" private const val METHOD_LOG = "log" fun build(event: String): JSONObject { return json { diff --git a/assistant_flutter b/assistant_flutter index 07f74229a8..fb6fab0393 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 07f74229a868914a41726fc845d118cddfe1af34 +Subproject commit fb6fab039300b4b6cb80567b9ee35141a7273de9 diff --git a/settings.gradle b/settings.gradle index 72671a45b4..fc6b67150a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir, - 'assistant_flutter/android/include_flutter.groovy' + 'assistant_flutter/.android/include_flutter.groovy' )) //include ':libraries:im' include ':libraries:LGLibrary' From a1b4c726dd1e38c6f3d71424d67ded86a20bc85a Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 20 Oct 2021 10:32:56 +0800 Subject: [PATCH 57/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=8A=A8=E6=80=81=E6=96=87=E6=A1=A3=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9Efilter=E5=AD=97=E6=AE=B5=E6=8F=8F=E8=BF=B0=20Added=20?= =?UTF-8?q?=E7=A4=BC=E5=8C=85=E4=B8=AD=E5=BF=83UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../java/com/gh/common/util/DirectUtils.kt | 21 ++++++++++++------- .../personal/PersonalFunctionAdapter.kt | 4 +--- assistant_flutter | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ff4be2731b..7fe3b81756 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -69,7 +69,7 @@ android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="true" android:theme="@style/AppCompatTheme.APP" - tools:replace="android:allowBackup" + tools:replace="android:name,android:allowBackup" tools:targetApi="n"> { DataCollectionUtils.uploadClick(context, "礼包中心", "发现") - - val intent = LibaoActivity.getIntent(context, "(发现:礼包)") - context.startActivity(intent) + DirectUtils.directToGift(context) } "工具箱" -> { DataCollectionUtils.uploadClick(context, "工具箱", "发现") diff --git a/assistant_flutter b/assistant_flutter index fb6fab0393..08b391c291 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit fb6fab039300b4b6cb80567b9ee35141a7273de9 +Subproject commit 08b391c291221b95379813ea756162accc51cd67 From 438b55c08b89e573ae8f0bf0bd47ad8ab5658aa8 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 28 Oct 2021 21:59:30 +0800 Subject: [PATCH 58/89] =?UTF-8?q?Updated=20=E5=AE=8C=E6=88=90=E7=A4=BC?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E5=BF=83-=E9=A2=86=E5=8F=96=E7=A4=BC?= =?UTF-8?q?=E5=8C=85=E5=8A=9F=E8=83=BD=20Updated=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=A4=BC=E5=8C=85=E4=B8=AD=E5=BF=83-=E9=A2=86=E5=8F=B7?= =?UTF-8?q?=E7=AE=B1=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/DirectUtils.kt | 4 +- .../java/com/gh/common/util/LibaoUtils.java | 101 +++++++++++++++--- .../FlutterBoostRouteServiceImplAop.java | 20 ++++ .../flutter/FlutterContextServiceImplAop.java | 7 ++ .../flutter/FlutterLiBaoServiceImplAop.java | 56 ++++++++++ .../com/gh/gamecenter/entity/LibaoEntity.kt | 2 +- .../gamecenter/forum/home/WelfaresAdapter.kt | 2 +- .../gamedetail/desc/GameLibaoAdapter.kt | 13 ++- .../libao/Libao2FragmentAdapter.java | 5 + .../gh/gamecenter/libao/LibaoNewAdapter.kt | 74 +++++++------ .../gh/gamecenter/libao/LibaoSearchAdapter.kt | 13 ++- .../personal/PersonalFunctionAdapter.kt | 2 +- assistant_flutter | 2 +- 13 files changed, 243 insertions(+), 58 deletions(-) create mode 100644 app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index dd32978fdf..b633f6bfe2 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -833,8 +833,8 @@ object DirectUtils { * 跳转到礼包中心,请不要随意修改方法名 */ @JvmStatic - fun directToGift(context: Context) { - val intent = LibaoActivity.getIntent(context, "(发现:礼包)") + fun directToGift(context: Context, entrance: String) { + val intent = LibaoActivity.getIntent(context, entrance) context.startActivity(intent) } diff --git a/app/src/main/java/com/gh/common/util/LibaoUtils.java b/app/src/main/java/com/gh/common/util/LibaoUtils.java index 1eb4524f0c..6a46590e20 100644 --- a/app/src/main/java/com/gh/common/util/LibaoUtils.java +++ b/app/src/main/java/com/gh/common/util/LibaoUtils.java @@ -39,6 +39,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Objects; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -371,6 +372,71 @@ public class LibaoUtils { }); } + public static void libaoBtnClick(final Context context, final TextView libaoBtn, final LibaoEntity libaoEntity, + final boolean isInstallRequired, final LibaoDetailAdapter adapter, + final String entrance, final String loginEntrance, final OnLibaoStatusChangeListener listener) { + String status = libaoEntity.getStatus(); + // 领取限制 + CheckLoginUtils.checkLogin(context, loginEntrance, () -> {// "礼包详情-[" + btnStatus + "]" + if ("ling".equals(status) || "tao".equals(status)) { + if (isInstallRequired && !isAppInstalled(context, libaoEntity.getPackageName()) && adapter != null) { + String platform; + if (TextUtils.isEmpty(libaoEntity.getPlatform())) { + platform = ""; + } else { + platform = PlatformUtils.getInstance(context).getPlatformName(libaoEntity.getPlatform()); + } + + boolean isExistPlatform = false; + ArrayList apk = adapter.getGameEntity().getApk(); + for (ApkEntity apkEntity : apk) { + if (TextUtils.isEmpty(libaoEntity.getPlatform())) break; + if (libaoEntity.getPlatform().equals(apkEntity.getPlatform())) { + isExistPlatform = true; + break; + } + } + + String dialogContent = context.getString(R.string.ling_rules_dialog, libaoEntity.getGame().getName(), platform); + boolean finalIsExistPlatform = isExistPlatform; + DialogHelper.showWarningDialog(context, "条件不符", + Html.fromHtml(dialogContent), isExistPlatform ? "关闭" : "", + isExistPlatform ? "立即安装" : "关闭", + () -> { + if (finalIsExistPlatform) { + adapter.openDownload(libaoEntity.getPlatform()); + } + return null; + }, null); + return; + } + } + + switch (Objects.requireNonNull(status)) { + case "coming": + Utils.toast(context, "还没到开始领取时间"); + break; + case "check": + if (!TextUtils.isEmpty(libaoEntity.getDes())) { + DialogHelper.showDialog(context, "使用说明", Html.fromHtml(libaoEntity.getDes()), "关闭", "", () -> {}, () -> {}, false, "", ""); + } + break; + case "repeatLing": + ToastUtils.showToast("礼包每天0点刷新,明日0点后可再领一个"); + break; + case "repeatLinged": + case "ling": + libaoLing(context, libaoBtn, libaoEntity, adapter, isInstallRequired, null, entrance, listener); + break; + case "repeatTao": + case "repeatTaoed": + case "tao": + libaoTao(context, libaoBtn, libaoEntity, isInstallRequired, adapter, status, entrance, listener); + break; + } + }); + } + private static void libaoTao(Context context, TextView libaoBtn, LibaoEntity libaoEntity, boolean isInstallRequired, LibaoDetailAdapter adapter, String status, String entrance, final OnLibaoStatusChangeListener listener) { if ("repeatTao".equals(status)) { @@ -433,7 +499,7 @@ public class LibaoUtils { @Override public void postFailed(Throwable error) { Utils.log("---" + error.toString()); - + if (listener != null) listener.onLibaoStatusError(); if (loadingDialog != null) loadingDialog.dismiss(); if (error instanceof HttpException) { @@ -452,9 +518,11 @@ public class LibaoUtils { case "fetched": Utils.toast(context, "你今天已领过这个礼包了, 不能再淘号"); - libaoBtn.setText("已淘号"); - libaoBtn.setBackgroundResource(R.drawable.libao_taoed_style); - libaoBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.libao_taoed_selector)); + if (libaoBtn != null) { + libaoBtn.setText("已淘号"); + libaoBtn.setBackgroundResource(R.drawable.libao_taoed_style); + libaoBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.libao_taoed_selector)); + } libaoEntity.setStatus("taoed"); break; case "try tao": @@ -487,11 +555,16 @@ public class LibaoUtils { }); } - private static void libaoLing(final Context context, final TextView libaoBtn, final LibaoEntity libaoEntity, final LibaoDetailAdapter adapter, + private static void libaoLing(final Context context, TextView libaoBtn, final LibaoEntity libaoEntity, final LibaoDetailAdapter adapter, final boolean isInstallRequired, String captchaCode, final String entrance, final OnLibaoStatusChangeListener listener) { if (BuildConfig.DEBUG) { - Log.e("LIBAO", "context? " + context + libaoBtn.getContext()); + if (libaoBtn != null) { + Log.e("LIBAO", "context? " + context + libaoBtn.getContext()); + } else { + Log.e("LIBAO", "context? " + context); + } + } final Dialog loadingDialog = DialogUtils.showWaitDialog(context, "领取中..."); @@ -546,7 +619,7 @@ public class LibaoUtils { @Override public void postFailed(Throwable error) { if (loadingDialog != null) loadingDialog.dismiss(); - + if (listener != null) listener.onLibaoStatusError(); if (error instanceof HttpException) { HttpException exception = (HttpException) error; if (exception.code() == 403) { @@ -572,10 +645,11 @@ public class LibaoUtils { EventBus.getDefault().post(new EBUISwitch(REFRESH_LIBAO_TIME, countdown)); } - libaoBtn.setText(R.string.libao_linged); - libaoBtn.setBackgroundResource(R.drawable.libao_linged_style); - libaoBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.libao_linged_selector)); - + if (libaoBtn != null) { + libaoBtn.setText(R.string.libao_linged); + libaoBtn.setBackgroundResource(R.drawable.libao_linged_style); + libaoBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.libao_linged_selector)); + } libaoEntity.setStatus("linged"); break; case "try tao": @@ -583,7 +657,9 @@ public class LibaoUtils { DialogUtils.showHintDialog(context, "礼包已领光" , "手速不够快,礼包已经被抢光了,十分抱歉", "知道了"); libaoEntity.setStatus("used_up"); - initLibaoBtn(context, libaoBtn, libaoEntity, isInstallRequired, adapter, false, entrance, listener); + if (libaoBtn != null) { + initLibaoBtn(context, libaoBtn, libaoEntity, isInstallRequired, adapter, false, entrance, listener); + } break; case "maintaining": Utils.toast(context, "网络状态异常,请稍后再试"); @@ -739,5 +815,6 @@ public class LibaoUtils { public interface OnLibaoStatusChangeListener { void onLibaoStatusChange(); + void onLibaoStatusError(); } } diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index da59659e60..eb9eb16721 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -1,9 +1,17 @@ package com.gh.flutter; +import static com.gh.gamecenter.libao.LibaoNewFragment.LIBAO_NEW_REQUEST; + +import android.app.Activity; import android.content.Context; +import android.content.Intent; import com.gh.common.DefaultUrlHandler; import com.gh.common.util.EntranceUtils; +import com.gh.gamecenter.LibaoDetailActivity; +import com.gh.gamecenter.entity.LibaoEntity; +import com.google.gson.Gson; +import com.google.gson.JsonElement; import java.util.Map; @@ -15,6 +23,7 @@ public class FlutterBoostRouteServiceImplAop { private static final String METHOD_HANDLE_HELP_DETAIL = "handleHelpDetail"; private static final String METHOD_HANDLE_HELP_SUGGESTION = "handleHelpSuggestion"; private static final String METHOD_HANDLE_QQ_GROUP = "handleQQGroup"; + private static final String METHOD_HANDLE_GIFT_DETAIL = "handleGiftDetail"; @TargetClass(TARGET_CLASS) @Insert(METHOD_HANDLE_HELP_DETAIL) @@ -44,4 +53,15 @@ public class FlutterBoostRouteServiceImplAop { String url = "ghzhushou://" + EntranceUtils.HOST_QQ_QUN + "?key=" + params.get("key"); DefaultUrlHandler.interceptUrl(context, url, ""); } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_GIFT_DETAIL) + public void handleGiftDetail(Context context, Map params) { + String entrance = (String) params.get("entrance"); + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(params.get("libao")); + LibaoEntity libaoEntity = new Gson().fromJson(element, LibaoEntity.class); + Intent intent = LibaoDetailActivity.getIntent(context, libaoEntity, false, entrance + "+(礼包中心:最新)"); + ((Activity)context).startActivityForResult(intent, LIBAO_NEW_REQUEST); + } } diff --git a/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java index 60e8d54ffe..d598533aa5 100644 --- a/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterContextServiceImplAop.java @@ -26,6 +26,7 @@ public class FlutterContextServiceImplAop { private static final String METHOD_GET_QQ_QUN = "getQQQun"; private static final String METHOD_GET_QQ_QUN_KEY = "getQQQunKey"; private static final String METHOD_GET_BASE64_ENCODED_IMEI = "getBase64EncodedIMEI"; + private static final String METHOD_GET_USER_ID = "getUserId"; @TargetClass(TARGET_CLASS) @Insert(METHOD_GET_TOKEN) @@ -96,4 +97,10 @@ public class FlutterContextServiceImplAop { public String getBase64EncodedIMEI() { return MetaUtil.getBase64EncodedIMEI(); } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_GET_USER_ID) + public String getUserId() { + return UserManager.getInstance().getUserId(); + } } diff --git a/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java new file mode 100644 index 0000000000..c56efa52aa --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java @@ -0,0 +1,56 @@ +package com.gh.flutter; + +import android.content.Context; + +import com.gh.common.util.LibaoUtils; +import com.gh.gamecenter.entity.LibaoEntity; +import com.google.gson.Gson; +import com.google.gson.JsonElement; + +import java.util.Map; + +import me.ele.lancet.base.annotations.Insert; +import me.ele.lancet.base.annotations.TargetClass; + +public class FlutterLiBaoServiceImplAop { + + private static final String TARGET_CLASS = + "com.halo.assistant.flutter.messenger.service.FlutterLiBaoServiceImpl"; + private static final String METHOD_LING = "ling"; + + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_LING) + public void ling(final Context context, + final String entrance, + final String libaoText, + final Map libao, + final Runnable onStatusSuccess) { + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(libao); + LibaoEntity libaoEntity = new Gson().fromJson(element, LibaoEntity.class); + LibaoUtils.libaoBtnClick(context, null, + libaoEntity, false, null, + entrance + "+(礼包中心:最新)", "礼包详情-[" + libaoText + "]", + new OnLiBaoStatusChangeListener(onStatusSuccess)); + } + + public static final class OnLiBaoStatusChangeListener implements LibaoUtils.OnLibaoStatusChangeListener { + + private final Runnable runnable; + + public OnLiBaoStatusChangeListener(Runnable runnable) { + this.runnable = runnable; + } + + @Override + public void onLibaoStatusChange() { + runnable.run(); + } + + @Override + public void onLibaoStatusError() { + + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/entity/LibaoEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/LibaoEntity.kt index d9bf01e514..dae5e987e6 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/LibaoEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/LibaoEntity.kt @@ -17,7 +17,7 @@ data class LibaoEntity( var name: String? = null, var des: String? = null, //使用说明 var platform: String? = null, - @SerializedName("type") + @SerializedName("type", alternate = ["status"]) var status: String? = null, var beforeStatus: String? = null, var code: String? = null, diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt b/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt index a10ceab298..adff595420 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/WelfaresAdapter.kt @@ -36,7 +36,7 @@ class WelfaresAdapter(context: Context, "礼包中心" -> { NewLogUtils.logForumPageEvent("click_forum_gift_center") - mContext.startActivity(LibaoActivity.getIntent(mContext, "(社区-论坛:礼包中心)")) + DirectUtils.directToGift(mContext, "(社区-论坛:礼包中心)") } "游戏动态" -> { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt index eba5ffc191..3f0f030b4e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt @@ -122,9 +122,16 @@ class GameLibaoAdapter(val context: Context, val libaos: ArrayList, } // LibaoUtils.setLiBaoBtnStatusRound(holder.binding.receiveTv, libaoEntity,true, context) - LibaoUtils.initLibaoBtn(context, holder.binding.receiveTv, libaoEntity, false, null, true, "游戏详情"){ - notifyItemChanged(position) - } + LibaoUtils.initLibaoBtn(context, holder.binding.receiveTv, libaoEntity, false, null, true, "游戏详情", object: LibaoUtils.OnLibaoStatusChangeListener{ + override fun onLibaoStatusChange() { + notifyItemChanged(position) + } + + override fun onLibaoStatusError() { + + } + + }) holder.itemView.setOnClickListener { listListener?.onListClick(it, position, libaoEntity) } diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java index db0ac554a4..c2b9d90ad6 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java @@ -231,6 +231,11 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { public void onLibaoStatusChange() { notifyItemChanged(position); } + + @Override + public void onLibaoStatusError() { + + } }); // LibaoUtils.setLiBaoBtnStatusRound(holder.libaoBtnStatus, libaoEntity, true, mContext); } diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt index 18b8de5730..d43cd0069e 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt @@ -56,39 +56,39 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe // 去掉重复数据 LibaoUtils.removeDuplicateData(mLibaoList, list) } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response>() { - override fun onResponse(response: List?) { - mLibaoList.addAll(response!!) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List?) { + mLibaoList.addAll(response!!) // notifyDataSetChanged() - if (response.size < 10) { - isOver = true - mCallBackListener.loadDone("TAG") - } - - if (mLibaoList.size == 0) { - mCallBackListener.loadEmpty() - } else { - mCallBackListener.loadDone() - } - - if (response.isNotEmpty()) { - getLibaoStatus(response) - } - - mPage++ - isLoading = false - isNetworkError = false + if (response.size < 10) { + isOver = true + mCallBackListener.loadDone("TAG") } - override fun onFailure(e: HttpException?) { - mCallBackListener.loadError() - isNetworkError = true - isLoading = false + if (mLibaoList.size == 0) { + mCallBackListener.loadEmpty() + } else { + mCallBackListener.loadDone() } - }) + + if (response.isNotEmpty()) { + getLibaoStatus(response) + } + + mPage++ + isLoading = false + isNetworkError = false + } + + override fun onFailure(e: HttpException?) { + mCallBackListener.loadError() + isNetworkError = true + isLoading = false + } + }) } /** @@ -187,8 +187,10 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe if (TextUtils.isEmpty(libaoEntity.platform)) { holder.libaoGameName.text = libaoEntity.game?.name } else { - holder.libaoGameName.text = StringUtils.buildString(libaoEntity.game?.name, " - ", PlatformUtils.getInstance(mContext) - .getPlatformName(libaoEntity.platform)) + holder.libaoGameName.text = StringUtils.buildString( + libaoEntity.game?.name, " - ", PlatformUtils.getInstance(mContext) + .getPlatformName(libaoEntity.platform) + ) } holder.libaoGameIcon.displayGameIcon(libaoEntity.getIcon(), libaoEntity.getIconSubscript()) @@ -202,10 +204,14 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe if (libaoEntity.status != null) { LibaoUtils.initLibaoBtn(mContext, holder.libaoBtnStatus, libaoEntity, false, null, true, - mEntrance + "+(礼包中心:最新)"){ - notifyItemChanged(position) - } -// LibaoUtils.setLiBaoBtnStatusRound(holder.libaoBtnStatus, libaoEntity, true, mContext) + mEntrance + "+(礼包中心:最新)", object : LibaoUtils.OnLibaoStatusChangeListener { + override fun onLibaoStatusChange() { + notifyItemChanged(position) + } + + override fun onLibaoStatusError() {} + }) + // LibaoUtils.setLiBaoBtnStatusRound(holder.libaoBtnStatus, libaoEntity, true, mContext) } } diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt index 22b3a013fe..b7cfcba79c 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt @@ -216,9 +216,16 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, if (libaoEntity.status != null) { LibaoUtils.initLibaoBtn(mContext, holder.libaoBtnStatus, libaoEntity, false, null,false, - mEntrance + "+(礼包中心:最新)"){ - notifyItemChanged(position) - } + mEntrance + "+(礼包中心:最新)", object: LibaoUtils.OnLibaoStatusChangeListener { + override fun onLibaoStatusChange() { + notifyItemChanged(position) + } + + override fun onLibaoStatusError() { + + } + + }) } holder.libaoBtnStatus.isClickable = false } diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt index d44e47ba6f..b9cd92d16d 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt @@ -238,7 +238,7 @@ class PersonalFunctionAdapter(val context: Context, val groupName: String, var m } "礼包中心" -> { DataCollectionUtils.uploadClick(context, "礼包中心", "发现") - DirectUtils.directToGift(context) + DirectUtils.directToGift(context, "(发现:礼包)") } "工具箱" -> { DataCollectionUtils.uploadClick(context, "工具箱", "发现") diff --git a/assistant_flutter b/assistant_flutter index 08b391c291..ba793b5d99 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 08b391c291221b95379813ea756162accc51cd67 +Subproject commit ba793b5d99635629ed44b4ae54a48c4a261304d5 From f3ef7930f317470774ee639778bff5fd2c25640d Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 2 Nov 2021 16:51:04 +0800 Subject: [PATCH 59/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0Flutter?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../FlutterBoostRouteServiceImplAop.java | 60 +++++++++++++++++++ libraries/LGLibrary | 2 +- 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c5674a3f12..70c864415b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -357,7 +357,9 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation project(':flutter') + implementation(project(':flutter'), { + exclude group: 'androidx.swiperefreshlayout' + }) compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index eb9eb16721..e475832587 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -1,5 +1,6 @@ package com.gh.flutter; +import static com.gh.gamecenter.info.ConcernFragment.NEWS_MESSAGE_ARTICLE_REQUEST; import static com.gh.gamecenter.libao.LibaoNewFragment.LIBAO_NEW_REQUEST; import android.app.Activity; @@ -7,8 +8,15 @@ import android.content.Context; import android.content.Intent; import com.gh.common.DefaultUrlHandler; +import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.LibaoDetailActivity; +import com.gh.gamecenter.MessageDetailActivity; +import com.gh.gamecenter.NewsDetailActivity; +import com.gh.gamecenter.ShareCardActivity; +import com.gh.gamecenter.ShareCardPicActivity; +import com.gh.gamecenter.WebActivity; +import com.gh.gamecenter.entity.ConcernEntity; import com.gh.gamecenter.entity.LibaoEntity; import com.google.gson.Gson; import com.google.gson.JsonElement; @@ -24,6 +32,9 @@ public class FlutterBoostRouteServiceImplAop { private static final String METHOD_HANDLE_HELP_SUGGESTION = "handleHelpSuggestion"; private static final String METHOD_HANDLE_QQ_GROUP = "handleQQGroup"; private static final String METHOD_HANDLE_GIFT_DETAIL = "handleGiftDetail"; + private static final String METHOD_HANDLE_COMMENT_DETAIL = "handleGameMomentCommentDetail"; + private static final String METHOD_HANDLE_SHARE_CARD = "handleShareCard"; + private static final String METHOD_HANDLE_GAME_MOMENT_DETAIL = "handleGameMomentDetail"; @TargetClass(TARGET_CLASS) @Insert(METHOD_HANDLE_HELP_DETAIL) @@ -64,4 +75,53 @@ public class FlutterBoostRouteServiceImplAop { Intent intent = LibaoDetailActivity.getIntent(context, libaoEntity, false, entrance + "+(礼包中心:最新)"); ((Activity)context).startActivityForResult(intent, LIBAO_NEW_REQUEST); } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_COMMENT_DETAIL) + public void handleGameMomentCommentDetail(Context context, Map params) { + String entrance = (String) params.get("entrance"); + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(params.get("concern")); + ConcernEntity concern = new Gson().fromJson(element, ConcernEntity.class); + Intent intent = MessageDetailActivity.getIntentByEntity(context, concern, entrance); + ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_SHARE_CARD) + public void handleShareCard(Context context, Map params) { + String entrance = (String) params.get("entrance"); + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(params.get("concern")); + ConcernEntity concern = new Gson().fromJson(element, ConcernEntity.class); + if (concern.getImg() != null && concern.getImg().size() > 0) { + ShareCardPicActivity.startShareCardPicActivity(context, concern, entrance); + } else { + String shareContent; + if (concern.getBrief() != null) { + shareContent = concern.getBrief(); + } else { + shareContent = concern.getContent(); + } + context.startActivity(ShareCardActivity.getIntent(context, concern, shareContent)); + } + } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_GAME_MOMENT_DETAIL) + public void handleGameMomentDetail(Context context, Map params) { + String entrance = (String) params.get("entrance"); + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(params.get("concern")); + ConcernEntity concern = new Gson().fromJson(element, ConcernEntity.class); + DataCollectionUtils.uploadClick(context, "列表", "资讯-关注", concern.getTitle()); + //统计阅读量 + if (concern.getLink() != null) { + Intent intent = WebActivity.getIntentByNews(context, concern, entrance); + ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + } else { + Intent intent = NewsDetailActivity.getIntentById(context, concern.getId(), entrance); + ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + } + } } diff --git a/libraries/LGLibrary b/libraries/LGLibrary index d3ad512b7b..7b7d13d471 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit d3ad512b7b53427ed024ddba44dfa0cbd6e62691 +Subproject commit 7b7d13d47190581c24ae5f89b02a2d7e78ccde7f From ed6b2960cc9d82c505d29b4ec925445bdeaab5ac Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 2 Nov 2021 16:55:54 +0800 Subject: [PATCH 60/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index ba793b5d99..e0ef10eccf 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit ba793b5d99635629ed44b4ae54a48c4a261304d5 +Subproject commit e0ef10eccf71d7142e3cf18375a748af2d79115a From 46de8f5f9e2e9ffbce4bbad549badccfcc6c7fb8 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 2 Nov 2021 17:34:11 +0800 Subject: [PATCH 61/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0=E6=88=91?= =?UTF-8?q?=E7=9A=84=E5=85=B3=E6=B3=A8=E8=B7=B3=E8=BD=AC=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flutter/FlutterBoostRouteServiceImplAop.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index e475832587..fbe2b05492 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -10,6 +10,8 @@ import android.content.Intent; import com.gh.common.DefaultUrlHandler; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.StringUtils; +import com.gh.gamecenter.GameDetailActivity; import com.gh.gamecenter.LibaoDetailActivity; import com.gh.gamecenter.MessageDetailActivity; import com.gh.gamecenter.NewsDetailActivity; @@ -17,6 +19,7 @@ import com.gh.gamecenter.ShareCardActivity; import com.gh.gamecenter.ShareCardPicActivity; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.entity.ConcernEntity; +import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.LibaoEntity; import com.google.gson.Gson; import com.google.gson.JsonElement; @@ -35,6 +38,7 @@ public class FlutterBoostRouteServiceImplAop { private static final String METHOD_HANDLE_COMMENT_DETAIL = "handleGameMomentCommentDetail"; private static final String METHOD_HANDLE_SHARE_CARD = "handleShareCard"; private static final String METHOD_HANDLE_GAME_MOMENT_DETAIL = "handleGameMomentDetail"; + private static final String METHOD_HANDLE_GAME_DETAIL = "handleGameDetail"; @TargetClass(TARGET_CLASS) @Insert(METHOD_HANDLE_HELP_DETAIL) @@ -124,4 +128,15 @@ public class FlutterBoostRouteServiceImplAop { ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); } } + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_HANDLE_GAME_DETAIL) + public void handleGameDetail(Context context, Map params) { + String entrance = (String) params.get("entrance"); + Gson gson = new Gson(); + JsonElement element = gson.toJsonTree(params.get("game")); + GameEntity game = new Gson().fromJson(element, GameEntity.class); + DataCollectionUtils.uploadClick(context, "列表", "我的关注", game.getName()); + GameDetailActivity.startGameDetailActivity(context, game, StringUtils.buildString(entrance, "+(我的关注-列表)")); + } } From 0f0dc6dd9b9171423a84b06e0883c6db76733828 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 2 Nov 2021 17:36:19 +0800 Subject: [PATCH 62/89] =?UTF-8?q?Updated=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index e0ef10eccf..b4c97d2c4d 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit e0ef10eccf71d7142e3cf18375a748af2d79115a +Subproject commit b4c97d2c4ddeba876eba4fc70cd1da91d80111ab From 293fc635e10e121dda10670f65a4e3968760ee08 Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 3 Nov 2021 16:42:20 +0800 Subject: [PATCH 63/89] =?UTF-8?q?Updated=20=E6=95=B4=E5=90=88=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E9=85=8D=E7=BD=AE=20Added=20AssistantNavigator?= =?UTF-8?q?=E6=95=B4=E5=90=88=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=A0=B9=E6=8D=AE=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E4=BD=BF=E7=94=A8=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index b4c97d2c4d..7084a7f934 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit b4c97d2c4ddeba876eba4fc70cd1da91d80111ab +Subproject commit 7084a7f934906cc03dc0e9d83f14a3990b6b7e18 From 29150427191b1eb097ec67ddc8c1d80795f8455d Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 8 Nov 2021 09:09:56 +0800 Subject: [PATCH 64/89] =?UTF-8?q?Fixed=20=E8=A7=A3=E5=86=B3=E7=A4=BC?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E5=BF=83=E6=A8=A1=E5=9D=97=E5=8E=9F=E7=94=9F?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E5=90=8E?= =?UTF-8?q?=EF=BC=8CFlutter=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE=E7=9A=84?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 7084a7f934..81a2b46c6b 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 7084a7f934906cc03dc0e9d83f14a3990b6b7e18 +Subproject commit 81a2b46c6b8b460bd0f5ab15fac8afc2350aab56 From 8dd8d21e8549a56746799ef18816fa452fb57cf3 Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 8 Nov 2021 11:30:57 +0800 Subject: [PATCH 65/89] =?UTF-8?q?Fixed=20Flutter=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E5=8A=A0=E8=BD=BD=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 81a2b46c6b..643ea68810 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 81a2b46c6b8b460bd0f5ab15fac8afc2350aab56 +Subproject commit 643ea688107545b02b46bf84022fb7b89f983d61 From bb854161f57dee54b74dc4d499a6367a5d11693f Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 9 Nov 2021 18:46:41 +0800 Subject: [PATCH 66/89] =?UTF-8?q?Updated=20=E5=AE=9E=E7=8E=B0=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E9=A1=B5=E9=9D=A2=E7=82=B9=E5=87=BB=E5=85=B3=E6=B3=A8?= =?UTF-8?q?=EF=BC=8C=E9=A2=86=E5=8F=96=E7=A4=BC=E5=8C=85=E5=90=8E=EF=BC=8C?= =?UTF-8?q?Flutter=E9=A1=B5=E9=9D=A2=E7=9A=84=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 - .../java/com/gh/common/util/ConcernUtils.kt | 13 +++++++++ .../java/com/gh/common/util/LibaoUtils.java | 27 ++++++++++++------- .../FlutterBoostRouteServiceImplAop.java | 2 ++ .../flutter/FlutterLiBaoServiceImplAop.java | 26 +++--------------- .../gamedetail/desc/GameLibaoAdapter.kt | 13 +++------ .../libao/Libao2FragmentAdapter.java | 11 +++----- .../gh/gamecenter/libao/LibaoNewAdapter.kt | 14 +++++----- .../gh/gamecenter/libao/LibaoSearchAdapter.kt | 18 +++++-------- 9 files changed, 56 insertions(+), 69 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b86d3286a5..f0d8cdaa8b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,6 @@ apply plugin: 'me.ele.lancet' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' - import groovy.xml.XmlUtil android { diff --git a/app/src/main/java/com/gh/common/util/ConcernUtils.kt b/app/src/main/java/com/gh/common/util/ConcernUtils.kt index a446021a3f..7ef61ce670 100644 --- a/app/src/main/java/com/gh/common/util/ConcernUtils.kt +++ b/app/src/main/java/com/gh/common/util/ConcernUtils.kt @@ -39,6 +39,7 @@ object ConcernUtils { super.onResponse(response) listener?.onSuccess() EventBus.getDefault().post(EBConcernChanged(gameId, true)) + dispatchFollowChangeEventToFlutter(gameId, true) } override fun onFailure(e: HttpException?) { @@ -58,6 +59,7 @@ object ConcernUtils { super.onResponse(response) listener?.onSuccess() EventBus.getDefault().post(EBConcernChanged(gameId, false)) + dispatchFollowChangeEventToFlutter(gameId, false) } override fun onFailure(e: HttpException?) { @@ -131,6 +133,17 @@ object ConcernUtils { }) } + /** + * 通知Flutter游戏关注状态发生变化 + * 请不要随意修改方法名 + * @param gameId 游戏ID + * @param follow 关注状态 + */ + @JvmStatic + fun dispatchFollowChangeEventToFlutter(gameId: String, follow: Boolean) { + + } + interface onConcernListener { fun onSuccess() diff --git a/app/src/main/java/com/gh/common/util/LibaoUtils.java b/app/src/main/java/com/gh/common/util/LibaoUtils.java index c41ff99dad..078c30e509 100644 --- a/app/src/main/java/com/gh/common/util/LibaoUtils.java +++ b/app/src/main/java/com/gh/common/util/LibaoUtils.java @@ -480,11 +480,11 @@ public class LibaoUtils { return; } libaoEntity.setStatus("taoed"); - initLibaoCode(libaoEntity, new UserDataLibaoEntity(libaoCode, "tao", Utils.getTime(context))); - if (adapter != null) { - adapter.initLibaoCode(new UserDataLibaoEntity(libaoCode, "tao", Utils.getTime(context))); - } + UserDataLibaoEntity me = new UserDataLibaoEntity(libaoCode, "ling", Utils.getTime(context)); + initLibaoCode(libaoEntity, me); + if (adapter != null) adapter.initLibaoCode(me); EventBus.getDefault().post(new EBReuse("libaoChanged")); + dispatchLiBaoChangeEventToFlutter(libaoEntity.getId(), "linged", GsonUtils.toJson(me)); if (listener != null) listener.onLibaoStatusChange(); uploadEvent(libaoEntity, true, entrance); String des; @@ -499,7 +499,7 @@ public class LibaoUtils { @Override public void postFailed(Throwable error) { Utils.log("---" + error.toString()); - if (listener != null) listener.onLibaoStatusError(); + if (loadingDialog != null) loadingDialog.dismiss(); if (error instanceof HttpException) { @@ -591,10 +591,11 @@ public class LibaoUtils { } libaoEntity.setAvailable(libaoEntity.getAvailable() - 1); libaoEntity.setStatus("linged"); - initLibaoCode(libaoEntity, new UserDataLibaoEntity(libaoCode, "ling", Utils.getTime(context))); + UserDataLibaoEntity me = new UserDataLibaoEntity(libaoCode, "ling", Utils.getTime(context)); + initLibaoCode(libaoEntity, me); if (listener != null) listener.onLibaoStatusChange(); EventBus.getDefault().post(new EBReuse("libaoChanged")); - + dispatchLiBaoChangeEventToFlutter(libaoEntity.getId(), "linged", GsonUtils.toJson(me)); uploadEvent(libaoEntity, false, entrance); if (adapter != null) { @@ -619,7 +620,7 @@ public class LibaoUtils { @Override public void postFailed(Throwable error) { if (loadingDialog != null) loadingDialog.dismiss(); - if (listener != null) listener.onLibaoStatusError(); + if (error instanceof HttpException) { HttpException exception = (HttpException) error; if (exception.code() == 403) { @@ -687,6 +688,15 @@ public class LibaoUtils { }, captchaCode); } + /** + * 发送礼包领取状态变化事件给Flutter + * 请不要随意修改方法名 + * @param libaoId 礼包ID + * @param status 礼包状态 + * @param meJson 礼包领取信息 + */ + public static void dispatchLiBaoChangeEventToFlutter(String libaoId, String status, String meJson) {} + public static void initLibaoCode(LibaoEntity libaoEntity, UserDataLibaoEntity userDataLibaoEntity) { MeEntity userData = libaoEntity.getMe(); if (userData == null) { @@ -815,6 +825,5 @@ public class LibaoUtils { public interface OnLibaoStatusChangeListener { void onLibaoStatusChange(); - void onLibaoStatusError(); } } diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index fbe2b05492..29effae26a 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -73,9 +73,11 @@ public class FlutterBoostRouteServiceImplAop { @Insert(METHOD_HANDLE_GIFT_DETAIL) public void handleGiftDetail(Context context, Map params) { String entrance = (String) params.get("entrance"); + String beforeStatus = (String) params.get("beforeStatus"); Gson gson = new Gson(); JsonElement element = gson.toJsonTree(params.get("libao")); LibaoEntity libaoEntity = new Gson().fromJson(element, LibaoEntity.class); + libaoEntity.setBeforeStatus(beforeStatus); Intent intent = LibaoDetailActivity.getIntent(context, libaoEntity, false, entrance + "+(礼包中心:最新)"); ((Activity)context).startActivityForResult(intent, LIBAO_NEW_REQUEST); } diff --git a/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java index c56efa52aa..1d0806fead 100644 --- a/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterLiBaoServiceImplAop.java @@ -24,33 +24,15 @@ public class FlutterLiBaoServiceImplAop { public void ling(final Context context, final String entrance, final String libaoText, - final Map libao, - final Runnable onStatusSuccess) { + final String beforeStatus, + final Map libao) { Gson gson = new Gson(); JsonElement element = gson.toJsonTree(libao); LibaoEntity libaoEntity = new Gson().fromJson(element, LibaoEntity.class); + libaoEntity.setBeforeStatus(beforeStatus); LibaoUtils.libaoBtnClick(context, null, libaoEntity, false, null, entrance + "+(礼包中心:最新)", "礼包详情-[" + libaoText + "]", - new OnLiBaoStatusChangeListener(onStatusSuccess)); - } - - public static final class OnLiBaoStatusChangeListener implements LibaoUtils.OnLibaoStatusChangeListener { - - private final Runnable runnable; - - public OnLiBaoStatusChangeListener(Runnable runnable) { - this.runnable = runnable; - } - - @Override - public void onLibaoStatusChange() { - runnable.run(); - } - - @Override - public void onLibaoStatusError() { - - } + null); } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt index 4601e8ea5a..2c0b482799 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt @@ -122,16 +122,9 @@ class GameLibaoAdapter(val context: Context, val libaos: ArrayList, } // LibaoUtils.setLiBaoBtnStatusRound(holder.binding.receiveTv, libaoEntity,true, context) - LibaoUtils.initLibaoBtn(context, holder.binding.receiveTv, libaoEntity, false, null, true, "游戏详情", object: LibaoUtils.OnLibaoStatusChangeListener{ - override fun onLibaoStatusChange() { - notifyItemChanged(position) - } - - override fun onLibaoStatusError() { - - } - - }) + LibaoUtils.initLibaoBtn(context, holder.binding.receiveTv, libaoEntity, false, null, true, "游戏详情"){ + notifyItemChanged(position) + } if (!libaoEntity.packageName.isNullOrEmpty()) { holder.binding.receiveTv.setOnClickListener { listListener?.onListClick(it, position, libaoEntity) diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java index 3a802b773d..cc90edfe76 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java @@ -1,5 +1,8 @@ package com.gh.gamecenter.libao; +import static com.gh.common.constant.Constants.LIST_FOOTER_ITEM; +import static com.gh.common.constant.Constants.LIST_HEAD_ITEM; + import android.content.Context; import android.text.TextUtils; import android.view.View; @@ -32,9 +35,6 @@ import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; import retrofit2.HttpException; -import static com.gh.common.constant.Constants.LIST_FOOTER_ITEM; -import static com.gh.common.constant.Constants.LIST_HEAD_ITEM; - /** * Created by khy on 2016/12/12. */ @@ -231,11 +231,6 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { public void onLibaoStatusChange() { notifyItemChanged(position); } - - @Override - public void onLibaoStatusError() { - - } }); if (libaoEntity.getPackageName() != null && !libaoEntity.getPackageName().isEmpty()) { holder.libaoBtnStatus.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt index 9700ba6544..f3d9622744 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt @@ -205,14 +205,12 @@ class LibaoNewAdapter( holder.libaoDes.text = content if (libaoEntity.status != null) { - LibaoUtils.initLibaoBtn(mContext, holder.libaoBtnStatus, libaoEntity, false, null, true, - mEntrance + "+(礼包中心:最新)", object : LibaoUtils.OnLibaoStatusChangeListener { - override fun onLibaoStatusChange() { - notifyItemChanged(position) - } - - override fun onLibaoStatusError() {} - }) + LibaoUtils.initLibaoBtn( + mContext, holder.libaoBtnStatus, libaoEntity, false, null, true, + mEntrance + "+(礼包中心:最新)" + ) { + notifyItemChanged(position) + } // LibaoUtils.setLiBaoBtnStatusRound(holder.libaoBtnStatus, libaoEntity, true, mContext) if (!libaoEntity.packageName.isNullOrEmpty()) { holder.libaoBtnStatus.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt index e0ecb44eef..be711abb99 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt @@ -6,7 +6,10 @@ import android.view.ViewGroup import com.gh.base.OnListClickListener import com.gh.base.OnRequestCallBackListener import com.gh.common.constant.ItemViewType -import com.gh.common.util.* +import com.gh.common.util.LibaoUtils +import com.gh.common.util.PlatformUtils +import com.gh.common.util.StringUtils +import com.gh.common.util.UrlFilterUtils import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.adapter.viewholder.LibaoNormalViewHolder @@ -216,16 +219,9 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, if (libaoEntity.status != null) { LibaoUtils.initLibaoBtn(mContext, holder.libaoBtnStatus, libaoEntity, false, null,false, - mEntrance + "+(礼包中心:最新)", object: LibaoUtils.OnLibaoStatusChangeListener { - override fun onLibaoStatusChange() { - notifyItemChanged(position) - } - - override fun onLibaoStatusError() { - - } - - }) + mEntrance + "+(礼包中心:最新)"){ + notifyItemChanged(position) + } if (!libaoEntity.packageName.isNullOrEmpty()) { holder.libaoBtnStatus.setOnClickListener { mListListener.onListClick(holder.libaoBtnStatus, position, libaoEntity) From 11cae2c56f790f3f499952909e6d38d34db7022d Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 11 Nov 2021 11:00:15 +0800 Subject: [PATCH 67/89] =?UTF-8?q?Fixed=20=E6=B8=B8=E6=88=8F=E5=8A=A8?= =?UTF-8?q?=E6=80=81-=E7=A4=BC=E5=8C=85=E8=AF=A6=E6=83=85=E9=A2=86?= =?UTF-8?q?=E5=8F=96=E7=A4=BC=E5=8C=85=E5=90=8E=E9=A1=B5=E9=9D=A2=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/flutter/FlutterBoostRouteServiceImplAop.java | 7 +++++-- assistant_flutter | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index 29effae26a..561f2740af 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -73,11 +73,14 @@ public class FlutterBoostRouteServiceImplAop { @Insert(METHOD_HANDLE_GIFT_DETAIL) public void handleGiftDetail(Context context, Map params) { String entrance = (String) params.get("entrance"); - String beforeStatus = (String) params.get("beforeStatus"); + Map libaoStatus = (Map) params.get("libaoStatus"); Gson gson = new Gson(); JsonElement element = gson.toJsonTree(params.get("libao")); LibaoEntity libaoEntity = new Gson().fromJson(element, LibaoEntity.class); - libaoEntity.setBeforeStatus(beforeStatus); + libaoEntity.setBeforeStatus((String) libaoStatus.get("status")); + libaoEntity.setAvailable((Integer) libaoStatus.get("available")); + libaoEntity.setTotal(Integer.parseInt((String) libaoStatus.get("total"))); + libaoEntity.setCode((String) libaoStatus.get("code")); Intent intent = LibaoDetailActivity.getIntent(context, libaoEntity, false, entrance + "+(礼包中心:最新)"); ((Activity)context).startActivityForResult(intent, LIBAO_NEW_REQUEST); } diff --git a/assistant_flutter b/assistant_flutter index 643ea68810..ec89e1179d 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 643ea688107545b02b46bf84022fb7b89f983d61 +Subproject commit ec89e1179d71f0573b0872e0727b125f0c50076b From 135b55b20497e8d8e484405738eed07c1366095f Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 12 Nov 2021 18:38:18 +0800 Subject: [PATCH 68/89] =?UTF-8?q?Fixed=20=E7=A4=BC=E5=8C=85=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E5=88=97=E8=A1=A8=E6=97=A0=E6=95=B0=E6=8D=AEUI?= =?UTF-8?q?=E4=B8=8D=E5=B1=85=E4=B8=AD=E9=97=AE=E9=A2=98=20Fixed=20?= =?UTF-8?q?=E5=AD=98=E5=8F=B7=E7=AE=B1=E5=B7=B2=E8=BF=87=E6=9C=9F=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=B8=8B=E6=8B=89=E5=8A=A0=E8=BD=BD=E6=97=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=B6=E6=B2=A1=E6=9C=89=E6=98=BE=E7=A4=BA=E2=80=9C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=9B=B4=E5=A4=9A=E4=BA=86=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index ec89e1179d..bb382c1f10 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit ec89e1179d71f0573b0872e0727b125f0c50076b +Subproject commit bb382c1f10911370c96bc76f0e0d83ed2785a62a From 098f02f0aa9f322a62212a00af8f15212f2c530d Mon Sep 17 00:00:00 2001 From: axen Date: Mon, 15 Nov 2021 18:29:45 +0800 Subject: [PATCH 69/89] =?UTF-8?q?Added=20=E7=A4=BC=E5=8C=85=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E6=B7=BB=E5=8A=A0=E8=AF=B7=E5=85=88=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C=E7=99=BB=E5=BD=95=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=E5=88=B7=E6=96=B0=E5=85=B3=E6=B3=A8=E5=92=8C=E9=A2=86?= =?UTF-8?q?=E5=8F=B7=E7=AE=B1=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flutter/FlutterLoginServiceImplAop.java | 21 +++++++++++++++++++ .../gh/gamecenter/user/UserRepository.java | 9 +++++++- assistant_flutter | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/gh/flutter/FlutterLoginServiceImplAop.java diff --git a/app/src/main/java/com/gh/flutter/FlutterLoginServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterLoginServiceImplAop.java new file mode 100644 index 0000000000..f7a0c93979 --- /dev/null +++ b/app/src/main/java/com/gh/flutter/FlutterLoginServiceImplAop.java @@ -0,0 +1,21 @@ +package com.gh.flutter; + +import android.content.Context; + +import com.gh.common.util.CheckLoginUtils; + +import me.ele.lancet.base.annotations.Insert; +import me.ele.lancet.base.annotations.TargetClass; + +public class FlutterLoginServiceImplAop { + private static final String TARGET_CLASS = + "com.halo.assistant.flutter.messenger.service.FlutterLoginServiceImpl"; + private static final String METHOD_LING = "login"; + + + @TargetClass(TARGET_CLASS) + @Insert(METHOD_LING) + public void login(Context context, String entrance) { + CheckLoginUtils.checkLogin(context, entrance, null); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java index 2540b3b8d5..3f8abd05ae 100644 --- a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java +++ b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java @@ -18,9 +18,9 @@ import com.gh.common.repository.ReservationRepository; import com.gh.common.util.BiCallback; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceUtils; +import com.gh.common.util.EnergyTaskHelper; import com.gh.common.util.ErrorHelper; import com.gh.common.util.GameSubstituteRepositoryHelper; -import com.gh.common.util.EnergyTaskHelper; import com.gh.common.util.GsonUtils; import com.gh.common.util.LoginHelper; import com.gh.common.util.LoginUtils; @@ -311,6 +311,12 @@ public class UserRepository { }); } + /** + * 发送登录成功回调事件给Flutter + * 请不要随意修改方法名 + */ + public static void dispatchOnLoginToFlutter() {} + //更改用户信息 @SuppressLint("CheckResult") public void changeUserInfo(final String content, final String editType, final Boolean isForcedToCertificate) { @@ -523,6 +529,7 @@ public class UserRepository { EnergyTaskHelper.postEnergyTask("login"); } } + dispatchOnLoginToFlutter(); } @Override diff --git a/assistant_flutter b/assistant_flutter index bb382c1f10..13736e494e 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit bb382c1f10911370c96bc76f0e0d83ed2785a62a +Subproject commit 13736e494e238cc48aa7955952cacc351455fc85 From 6cca81c4bb2328d32e53f78a68cea3c7c700ddd7 Mon Sep 17 00:00:00 2001 From: axen Date: Wed, 17 Nov 2021 11:13:09 +0800 Subject: [PATCH 70/89] =?UTF-8?q?Added=20=E6=B8=B8=E6=88=8F=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=B7=BB=E5=8A=A0loading=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 13736e494e..8f4ee15708 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 13736e494e238cc48aa7955952cacc351455fc85 +Subproject commit 8f4ee15708cfffcd4922cc7a997fe57730f561df From 39cfa01f5a0e4c90b0b8fdbe09aa44d17f884a05 Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 18 Nov 2021 14:06:43 +0800 Subject: [PATCH 71/89] =?UTF-8?q?Fixed=20=E6=B8=B8=E6=88=8F=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=88=91=E7=9A=84=E5=85=B3=E6=B3=A8=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=92=8C=E9=9A=90=E8=97=8F=20Fixed=20?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=8A=A8=E6=80=81=E8=AF=84=E8=AE=BA=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E8=AF=84=E8=AE=BA=E5=88=97=E8=A1=A8=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20Fixed=20=E6=88=91=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E6=B3=A8=E6=97=A0=E6=95=B0=E6=8D=AEui=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=92=8C=E5=8F=96=E6=B6=88=E5=85=B3=E6=B3=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=97=AA=E7=83=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java | 4 ++++ assistant_flutter | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index 561f2740af..c2deb4ef7d 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -89,9 +89,13 @@ public class FlutterBoostRouteServiceImplAop { @Insert(METHOD_HANDLE_COMMENT_DETAIL) public void handleGameMomentCommentDetail(Context context, Map params) { String entrance = (String) params.get("entrance"); + Integer views = (Integer) params.get("views"); + Integer commentNum = (Integer) params.get("commentnum"); Gson gson = new Gson(); JsonElement element = gson.toJsonTree(params.get("concern")); ConcernEntity concern = new Gson().fromJson(element, ConcernEntity.class); + if (views != null) concern.setViews(views); + if (commentNum != null) concern.setCommentnum(commentNum); Intent intent = MessageDetailActivity.getIntentByEntity(context, concern, entrance); ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); } diff --git a/assistant_flutter b/assistant_flutter index 8f4ee15708..21a5138f44 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 8f4ee15708cfffcd4922cc7a997fe57730f561df +Subproject commit 21a5138f446ebe8f99935072bfa31c3b85c6f96f From 401c0bfdfeab20582a746c602ea79ce8dc3d290a Mon Sep 17 00:00:00 2001 From: axen Date: Thu, 18 Nov 2021 16:59:01 +0800 Subject: [PATCH 72/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0Flutter?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E4=BA=8B=E4=BB=B6=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/flutter/FlutterLogHubServiceImplAop.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt index 0649c4b859..9452c7564c 100644 --- a/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt +++ b/app/src/main/java/com/gh/flutter/FlutterLogHubServiceImplAop.kt @@ -1,11 +1,10 @@ package com.gh.flutter -import android.util.Log -import com.gh.common.json.JsonObjectBuilder import com.gh.common.json.json import com.gh.common.loghub.LoghubUtils import com.gh.common.tracker.Tracker import com.gh.common.util.LogUtils +import com.lightgame.utils.Utils import me.ele.lancet.base.annotations.Insert import me.ele.lancet.base.annotations.TargetClass import org.json.JSONObject @@ -31,10 +30,9 @@ class FlutterLogHubServiceImplAop { @Insert(METHOD_LOG) fun log(event: String, store: String, extras: Map?) { val json = build(event) - if (!extras.isNullOrEmpty()) extras.forEach { json.put(it.key, it.value) } - Log.d("FlutterLogHub", "event: $event") - Log.d("FlutterLogHub", "store: $store") - Log.d("FlutterLogHub", "json: $json") + if (!extras.isNullOrEmpty()) + extras.forEach { json.put(it.key, it.value) } + Utils.log("NewLogUtils", json.toString(4)) LoghubUtils.log(json, store, false) } } \ No newline at end of file From d7faf04a2e58ddc313ca01c6857768d0d1eeeba5 Mon Sep 17 00:00:00 2001 From: axen Date: Fri, 19 Nov 2021 11:31:19 +0800 Subject: [PATCH 73/89] =?UTF-8?q?Fixed=20=E4=BF=AE=E5=A4=8D=E7=A4=BC?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E5=BF=83=E6=90=9C=E7=B4=A2=E6=A1=86=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E5=85=B3=E9=94=AE=E5=AD=97=E5=90=8E=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E5=AF=B9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 21a5138f44..b35744ad2f 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 21a5138f446ebe8f99935072bfa31c3b85c6f96f +Subproject commit b35744ad2f5ce6f8a2c507807520b600e16fa42e From e870dc9fd7ef3784f3df39ead24ccf49738f289f Mon Sep 17 00:00:00 2001 From: leafwai Date: Fri, 19 Nov 2021 14:53:45 +0800 Subject: [PATCH 74/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8DToolbarActivity?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/base/ToolBarActivity.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/gh/base/ToolBarActivity.java b/app/src/main/java/com/gh/base/ToolBarActivity.java index bd1199b84e..d3c8dac5f3 100644 --- a/app/src/main/java/com/gh/base/ToolBarActivity.java +++ b/app/src/main/java/com/gh/base/ToolBarActivity.java @@ -11,6 +11,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.view.Window; import android.widget.FrameLayout; import android.widget.LinearLayout; @@ -82,6 +83,8 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon @Nullable private TextView mDownloadCountHint; + private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -196,13 +199,14 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon } else { final int[] diff = {0}; LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) layoutParams; - mActionMenuView.getViewTreeObserver().addOnGlobalLayoutListener(() -> { + mOnGlobalLayoutListener = () -> { if (diff[0] != mActionMenuView.getWidth() - mBackContainer.getWidth()) { diff[0] = mActionMenuView.getWidth() - mBackContainer.getWidth(); params.setMargins(diff[0], 0, 0, 0); mTitleContainer.setLayoutParams(params); } - }); + }; + mActionMenuView.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener); } } } @@ -304,4 +308,11 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon mToolbarContainer.setVisibility(isHide ? View.GONE : View.VISIBLE); } } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mActionMenuView != null && mOnGlobalLayoutListener != null && !showToolbarAtLeft()) + mActionMenuView.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener); + } } From 9df38387f29aa4d527e81ec2358477f1af5361ea Mon Sep 17 00:00:00 2001 From: juntao Date: Fri, 19 Nov 2021 16:26:02 +0800 Subject: [PATCH 75/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20DSA=20=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E6=B8=B8=E6=88=8F=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/android/apksig/ApkVerifier.java | 85 +++++++++++++++++++ .../com/gh/common/tracker/TrackerLogger.kt | 2 +- .../java/com/gh/common/util/Extensions.kt | 7 ++ .../java/com/gh/common/util/PackageUtils.java | 34 +++++--- .../download/UpdatableGameViewModel.kt | 8 +- .../packagehelper/PackageRepository.kt | 3 +- libraries/LGLibrary | 2 +- 7 files changed, 124 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/android/apksig/ApkVerifier.java b/app/src/main/java/com/android/apksig/ApkVerifier.java index f8c3b30d78..e6eae6b172 100644 --- a/app/src/main/java/com/android/apksig/ApkVerifier.java +++ b/app/src/main/java/com/android/apksig/ApkVerifier.java @@ -154,6 +154,37 @@ public class ApkVerifier { } } + /** + * Simply retrieve result that contains V1Signature only by ignoring all the verification process. + * + * @throws IOException if an I/O error is encountered while reading the APK + * @throws ApkFormatException if the APK is malformed + * @throws NoSuchAlgorithmException if the APK's signatures cannot be verified because a + * required cryptographic algorithm implementation is missing + * @throws IllegalStateException if this verifier's configuration is missing required + * information. + */ + public Result retrieveV1Signature() throws IOException, ApkFormatException, NoSuchAlgorithmException { + Closeable in = null; + try { + DataSource apk; + if (mApkDataSource != null) { + apk = mApkDataSource; + } else if (mApkFile != null) { + RandomAccessFile f = new RandomAccessFile(mApkFile, "r"); + in = f; + apk = DataSources.asDataSource(f, 0, f.length()); + } else { + throw new IllegalStateException("APK not provided"); + } + return retrieveV1Signature(apk); + } finally { + if (in != null) { + in.close(); + } + } + } + /** * Simply retrieve result that contains V2Signature only by ignoring all the verification process. * @@ -257,6 +288,60 @@ public class ApkVerifier { return result; } + /** + * Simply retrieve result that contains V1Signature only by ignoring all the verification process. + * + * @param apk APK file contents + * @throws IOException if an I/O error is encountered while reading the APK + * @throws ApkFormatException if the APK is malformed + * @throws NoSuchAlgorithmException if the APK's signatures cannot be verified because a + * required cryptographic algorithm implementation is missing + */ + private Result retrieveV1Signature(DataSource apk) throws IOException, ApkFormatException, NoSuchAlgorithmException { + int maxSdkVersion = mMaxSdkVersion; + + ApkUtils.ZipSections zipSections; + try { + zipSections = ApkUtils.findZipSections(apk); + } catch (ZipFormatException e) { + throw new ApkFormatException("Malformed APK: not a ZIP archive", e); + } + + Result result = new Result(); + Map> signatureSchemeApkContentDigests = + new HashMap<>(); + + // The SUPPORTED_APK_SIG_SCHEME_NAMES contains the mapping from version number to scheme + // name, but the verifiers use this parameter as the schemes supported by the target SDK + // range. Since the code below skips signature verification based on max SDK the mapping of + // supported schemes needs to be modified to ensure the verifiers do not report a stripped + // signature for an SDK range that does not support that signature version. For instance an + // APK with V1, V2, and V3 signatures and a max SDK of O would skip the V3 signature + // verification, but the SUPPORTED_APK_SIG_SCHEME_NAMES contains version 3, so when the V2 + // verification is performed it would see the stripping protection attribute, see that V3 + // is in the list of supported signatures, and report a stripped signature. + Map supportedSchemeNames = getSupportedSchemeNames(maxSdkVersion); + + // Android N and newer attempts to verify APKs using the APK Signing Block, which can + // include v2 and/or v3 signatures. If none is found, it falls back to JAR signature + // verification. If the signature is found but does not verify, the APK is rejected. + Set foundApkSigSchemeIds = new HashSet<>(2); + + int minSdkVersion = verifyAndGetMinSdkVersion(apk, zipSections); + V1SchemeVerifier.Result v1Result = + V1SchemeVerifier.verify( + apk, + zipSections, + supportedSchemeNames, + foundApkSigSchemeIds, + minSdkVersion, + maxSdkVersion); + + result.mergeFrom(v1Result); + return result; + } + + /** * Verifies the APK's signatures and returns the result of verification. The APK can be * considered verified iff the result's {@link Result#isVerified()} returns {@code true}. diff --git a/app/src/main/java/com/gh/common/tracker/TrackerLogger.kt b/app/src/main/java/com/gh/common/tracker/TrackerLogger.kt index dcd82cb877..9db61185f2 100644 --- a/app/src/main/java/com/gh/common/tracker/TrackerLogger.kt +++ b/app/src/main/java/com/gh/common/tracker/TrackerLogger.kt @@ -119,7 +119,7 @@ object TrackerLogger { fun logAppLaunch(context: Context) { val jsonObject = JSONObject() val payloadObject = JSONObject() - val signatureHash = PackageUtils.getApkSignatureByPackageName(context, context.packageName) + val signatureHash = PackageUtils.getApkSignatureByPackageName(context, context.packageName)[0] val sideLoadInfo = PackageUtils.getSideLoadedInfo() tryCatchInRelease { diff --git a/app/src/main/java/com/gh/common/util/Extensions.kt b/app/src/main/java/com/gh/common/util/Extensions.kt index db011d7e92..d52e80c9a8 100644 --- a/app/src/main/java/com/gh/common/util/Extensions.kt +++ b/app/src/main/java/com/gh/common/util/Extensions.kt @@ -737,6 +737,13 @@ fun List.safelyGetInRelease(index: Int): T? { } } +/** + * Array related + */ +fun Array.secondOrNull(): T? { + return if (isEmpty() || size < 2) null else this[1] +} + /** * 拦截 TextView 中的 Url Span,用应用内页面的形式打开链接 * @param shrankText 未展开时的文字 diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index 4ef51a72aa..ab06983394 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -216,14 +216,17 @@ public class PackageUtils { * 判断是否是插件包 */ public static boolean isSignedByGh(Context context, String packageName) { - String signature = getApkSignatureByPackageName(context, packageName); + String signature = getApkSignatureByPackageName(context, packageName)[0]; return publicKey.equals(signature); } /* * 根据包名,获取apk的签名信息 + * String[0] 为系统风格的公钥字符串 + * String[1] 为接口风格的公钥字符串 + * 请自行根据需要取用 */ - public static String getApkSignatureByPackageName(Context context, String packageName) { + public static String[] getApkSignatureByPackageName(Context context, String packageName) { try { PackageInfo packageInfo = context.getApplicationContext().getPackageManager() .getPackageInfo(packageName, PackageManager.GET_SIGNATURES); @@ -231,14 +234,14 @@ public class PackageUtils { // 使用幸运破解器破解安卓签名认证可能会出现不用签名也能装的情况,这里有可能是空的 if (signatures[0] != null) { - return parseSignature(signatures[0].toByteArray())[0]; + return parseSignature(signatures[0].toByteArray()); } else { - return null; + return new String[]{null, null}; } } catch (NameNotFoundException e) { e.printStackTrace(); } - return null; + return new String[]{null, null}; } /** @@ -251,14 +254,17 @@ public class PackageUtils { */ public static boolean isInstalledAppAndApkFileShareTheSameSignature(Context context, String packageName, String apkFilePath) { try { - String installedPublicKey = getApkSignatureByPackageName(context, packageName); + String[] installedPublicKeys = getApkSignatureByPackageName(context, packageName); + + String installedPublicKey1 = installedPublicKeys[0]; + String installedPublicKey2 = installedPublicKeys[1]; String v1SignaturePublicKey = getV1SignatureFromFile(apkFilePath); if (!TextUtils.isEmpty(v1SignaturePublicKey)) { - return v1SignaturePublicKey.equals(getApkSignatureByPackageName(context, packageName)); + return v1SignaturePublicKey.equals(installedPublicKey1) || v1SignaturePublicKey.equals(installedPublicKey2); } - return getV2SignatureFromFile(apkFilePath).equals(installedPublicKey); + return getV2SignatureFromFile(apkFilePath).equals(installedPublicKey1); } catch (Exception e) { e.printStackTrace(); } @@ -286,8 +292,12 @@ public class PackageUtils { return cert.getPublicKey().toString(); } } - return ""; - } catch (Exception e) { + + ApkVerifier verifier = new ApkVerifier.Builder(new File(apkFilePath)).build(); + ApkVerifier.Result result = verifier.retrieveV1Signature(); + + return result.getV1SchemeSigners().get(0).getCertificate().getPublicKey().toString(); + } catch (Throwable e) { return ""; } } @@ -321,7 +331,7 @@ public class PackageUtils { new ByteArrayInputStream(signature)); ret = new String[]{cert.getPublicKey().toString(), cert.getSerialNumber().toString()}; if (ret[0].startsWith("DSA")) { - ret[0] = "DSAPublicKey{" + ApkSigningBlockUtilsLite.toHex(cert.getPublicKey().getEncoded()) + "}"; + ret[1] = "DSAPublicKey{" + ApkSigningBlockUtilsLite.toHex(cert.getPublicKey().getEncoded()) + "}"; } } catch (CertificateException e) { e.printStackTrace(); @@ -352,7 +362,7 @@ public class PackageUtils { } // 判断当前已安装应用是否为光环签名 - if (publicKey.equals(getApkSignatureByPackageName(context, packageName))) { + if (publicKey.equals(getApkSignatureByPackageName(context, packageName)[0])) { return true; } diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt index ec5971b472..ef70dd1035 100644 --- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt @@ -164,11 +164,15 @@ class UpdatableGameViewModel( mismatchedVersionUpdateList.add(update) } } - } else if (samePackageNameUpdateList.find { it.signature == installedSignature || it.isPluggable } != null) { + } else if (samePackageNameUpdateList.find { + it.signature == installedSignature.firstOrNull() + || it.signature == installedSignature.secondOrNull() + || it.isPluggable } != null) { // 1. 存在同包名同签名的游戏,以同包名同签名的游戏作为我的版本 // 2. 若不存在同包名同签名的游戏,以插件化的游戏作为我的版本 for (update in samePackageNameUpdateList) { - if (update.isPluggable || (matchedVersionUpdate == null && installedSignature == update.signature)) { + if (update.isPluggable + || (matchedVersionUpdate == null && (installedSignature.firstOrNull() == update.signature || installedSignature.secondOrNull() == update.signature))) { matchedVersionUpdate = update } else { mismatchedVersionUpdateList.add(update) diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index f907168bdb..3e764ba6cc 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -246,7 +246,8 @@ object PackageRepository { for (apk in game.getApk()) { if (apk.version == PackageUtils.getVersionNameByPackageName(apk.packageName) && (TextUtils.isEmpty(apk.signature) - || apk.signature == PackageUtils.getApkSignatureByPackageName(mApplication, apk.packageName))) { + || apk.signature == PackageUtils.getApkSignatureByPackageName(mApplication, apk.packageName).firstOrNull() + || apk.signature == PackageUtils.getApkSignatureByPackageName(mApplication, apk.packageName).secondOrNull())) { currentVersionList.add(GameUpdateEntity().apply { id = game.id name = game.name diff --git a/libraries/LGLibrary b/libraries/LGLibrary index 7b7d13d471..36c7ab24ef 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit 7b7d13d47190581c24ae5f89b02a2d7e78ccde7f +Subproject commit 36c7ab24efb4b718ef3d85593a155b8268e9f37a From 7c55f71bb5c33490d53267c9405cd9e13a64fcd1 Mon Sep 17 00:00:00 2001 From: juntao Date: Fri, 19 Nov 2021 17:47:53 +0800 Subject: [PATCH 76/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=206.0=20=E4=BB=A5?= =?UTF-8?q?=E4=B8=8B=E8=AE=BE=E5=A4=87=E8=AF=BB=E5=8F=96=20DSA=20=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E4=BC=9A=E9=97=AA=E9=80=80=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/common/util/PackageUtils.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index ab06983394..c3cc763cf1 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -263,9 +263,13 @@ public class PackageUtils { if (!TextUtils.isEmpty(v1SignaturePublicKey)) { return v1SignaturePublicKey.equals(installedPublicKey1) || v1SignaturePublicKey.equals(installedPublicKey2); } + String v1SignaturePublicKeyFromSystemApi = getV1SignatureFromFileBySystemApi(apkFilePath); + if (!TextUtils.isEmpty(v1SignaturePublicKeyFromSystemApi)) { + return v1SignaturePublicKeyFromSystemApi.equals(installedPublicKey1); + } return getV2SignatureFromFile(apkFilePath).equals(installedPublicKey1); - } catch (Exception e) { + } catch (Throwable e) { e.printStackTrace(); } return false; @@ -302,6 +306,13 @@ public class PackageUtils { } } + /** + * 用系统 API 获取 V1 签名 (最后一招了) (大文件可能会 ANR,但 ANR 一会可用的话比不能用好点!) + */ + private static String getV1SignatureFromFileBySystemApi(String apkFilePath) { + return parseSignature(HaloApp.getInstance().getPackageManager().getPackageArchiveInfo(apkFilePath, PackageManager.GET_SIGNATURES).signatures[0].toByteArray())[0]; + } + /** * 从 APK 文件中获取 V2 签名公钥 * From 2ec43d4ff2a00ebd44610e875790fad7d61a2c02 Mon Sep 17 00:00:00 2001 From: leafwai Date: Fri, 19 Nov 2021 14:53:45 +0800 Subject: [PATCH 77/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8DToolbarActivity?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/base/ToolBarActivity.java | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/gh/base/ToolBarActivity.java b/app/src/main/java/com/gh/base/ToolBarActivity.java index d3c8dac5f3..385d4f7ea3 100644 --- a/app/src/main/java/com/gh/base/ToolBarActivity.java +++ b/app/src/main/java/com/gh/base/ToolBarActivity.java @@ -83,8 +83,6 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon @Nullable private TextView mDownloadCountHint; - private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -199,14 +197,17 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon } else { final int[] diff = {0}; LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) layoutParams; - mOnGlobalLayoutListener = () -> { - if (diff[0] != mActionMenuView.getWidth() - mBackContainer.getWidth()) { - diff[0] = mActionMenuView.getWidth() - mBackContainer.getWidth(); - params.setMargins(diff[0], 0, 0, 0); - mTitleContainer.setLayoutParams(params); + mActionMenuView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (diff[0] != mActionMenuView.getWidth() - mBackContainer.getWidth()) { + diff[0] = mActionMenuView.getWidth() - mBackContainer.getWidth(); + params.setMargins(diff[0], 0, 0, 0); + mTitleContainer.setLayoutParams(params); + } + mActionMenuView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } - }; - mActionMenuView.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener); + }); } } } @@ -308,11 +309,4 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon mToolbarContainer.setVisibility(isHide ? View.GONE : View.VISIBLE); } } - - @Override - protected void onDestroy() { - super.onDestroy(); - if (mActionMenuView != null && mOnGlobalLayoutListener != null && !showToolbarAtLeft()) - mActionMenuView.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener); - } } From 3d75d8507c5671b5b6c9e8ce2119d35fc796d573 Mon Sep 17 00:00:00 2001 From: leafwai Date: Mon, 22 Nov 2021 10:10:17 +0800 Subject: [PATCH 78/89] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E5=AF=BC=E8=88=AA=E6=A0=8F=E6=A0=87=E9=A2=98=E5=B1=85=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E7=8E=B0=20=E4=BC=98=E5=8C=96=E8=B5=84?= =?UTF-8?q?=E8=AE=AF=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F=E6=A0=87=E9=A2=98=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/base/ToolBarActivity.java | 39 +++++++++---------- .../com/gh/gamecenter/NewsDetailActivity.java | 3 ++ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/gh/base/ToolBarActivity.java b/app/src/main/java/com/gh/base/ToolBarActivity.java index 385d4f7ea3..ee667c3283 100644 --- a/app/src/main/java/com/gh/base/ToolBarActivity.java +++ b/app/src/main/java/com/gh/base/ToolBarActivity.java @@ -11,7 +11,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.ViewTreeObserver; import android.view.Window; import android.widget.FrameLayout; import android.widget.LinearLayout; @@ -190,25 +189,25 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon } } - if (mTitleContainer != null) { - ViewGroup.LayoutParams layoutParams = mTitleContainer.getLayoutParams(); - if (showToolbarAtLeft() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - mTitleTv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); - } else { - final int[] diff = {0}; - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) layoutParams; - mActionMenuView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - if (diff[0] != mActionMenuView.getWidth() - mBackContainer.getWidth()) { - diff[0] = mActionMenuView.getWidth() - mBackContainer.getWidth(); - params.setMargins(diff[0], 0, 0, 0); - mTitleContainer.setLayoutParams(params); - } - mActionMenuView.getViewTreeObserver().removeOnGlobalLayoutListener(this); - } - }); - } + if (showToolbarAtLeft() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && mTitleTv != null) { + mTitleTv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); + } + } + + @Override + protected void onResume() { + super.onResume(); + setTitleCenter(); + } + + // 设置标题居中 + public void setTitleCenter() { + if (mActionMenuView != null && mTitleContainer != null && mBackContainer != null && !showToolbarAtLeft()) { + mActionMenuView.post(() -> { + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mTitleContainer.getLayoutParams(); + params.setMargins(mActionMenuView.getWidth() - mBackContainer.getWidth(), 0, 0, 0); + mTitleContainer.setLayoutParams(params); + }); } } diff --git a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java index eff0c7e391..11d60ed592 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java @@ -288,6 +288,7 @@ public class NewsDetailActivity extends ToolBarActivity implements OnClickListen adapter.getNewsDetail(); if (!mHideUselessInfo) { mNewsShare.setVisible(true); + setTitleCenter(); } } } else { @@ -460,6 +461,7 @@ public class NewsDetailActivity extends ToolBarActivity implements OnClickListen public void loadDone() { // 通知更新收藏按钮 if (!mHideUselessInfo) { mNewsCollection.setVisible(true); + setTitleCenter(); NewsDetailEntity newsDetailEntity = adapter.getNewsDetailEntity(); if (newsDetailEntity.getMe() != null && newsDetailEntity.getMe().isArticleFavorite()) { mNewsCollection.setIcon(R.drawable.community_content_detail_collect_select); @@ -522,6 +524,7 @@ public class NewsDetailActivity extends ToolBarActivity implements OnClickListen if (!mHideUselessInfo) { mNewsShare.setVisible(true); + setTitleCenter(); } HistoryHelper.insertNewsEntity(mNewsEntity); From a91195d8296096316528d950fbfe6401fde009c0 Mon Sep 17 00:00:00 2001 From: juntao Date: Mon, 22 Nov 2021 15:30:42 +0800 Subject: [PATCH 79/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=A4=B4=E7=9A=84=20gid=20=E6=9B=B4=E6=96=B0=E4=B8=8D=E5=8F=8A?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java index 10c25999b6..37c296fe3e 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java @@ -85,7 +85,7 @@ class OkHttpCacheInterceptor implements Interceptor { } String token = UserManager.getInstance().getToken(); - String deviceId = UserManager.getInstance().getDeviceId(); + String deviceId = HaloApp.getInstance().getGid(); if (!TextUtils.isEmpty(token)) { request = request.newBuilder() .addHeader("TOKEN", token) From 8403db9c0e2a26f9c97ffbcdd21a838c3b94cfb8 Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 30 Nov 2021 09:17:22 +0800 Subject: [PATCH 80/89] Updated Pull away configurations of Flutter project and add them into init.flutter.gradle --- app/build.gradle | 25 +++++++++++++++++++------ assistant_flutter | 2 +- build.gradle | 4 ++-- dependencies.gradle | 3 --- init.flutter.gradle | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 init.flutter.gradle diff --git a/app/build.gradle b/app/build.gradle index f72afad9f0..21f1c43a1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' -apply plugin: 'me.ele.lancet' +//apply plugin: 'me.ele.lancet' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' @@ -370,10 +370,10 @@ dependencies { implementation project(':libraries:Matisse') // Flutter模块 - implementation(project(':flutter'), { - exclude group: 'androidx.swiperefreshlayout' - }) - compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 +// implementation(project(':flutter'), { +// exclude group: 'androidx.swiperefreshlayout' +// }) +// compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') if (propFile.exists()) { @@ -508,7 +508,20 @@ andResGuard { "R.drawable.suggest_type_function_suggest", "R.drawable.suggest_type_article_collect", "R.drawable.suggest_type_copyright", - "R.drawable.help_result_empty" + "R.drawable.help_result_empty", + "R.drawable.news_comment_detail_read", + "R.drawable.news_comment_detail_comment", + "R.drawable.news_comment_detail_share", + "R.drawable.ic_libao", + "R.drawable.ic_link", + "R.drawable.concern_message_icon", + "R.drawable.reuse_blank_hint", + "R.drawable.ic_concern", + "R.drawable.concern_down", + "R.drawable.concern_up", + "R.drawable.ic_libao_more", + "R.drawable.ic_libao_delete", + "R.drawable.ic_dialog_close" ] compressFilePattern = [ "*.png", diff --git a/assistant_flutter b/assistant_flutter index b35744ad2f..7f46e91b72 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit b35744ad2f5ce6f8a2c507807520b600e16fa42e +Subproject commit 7f46e91b7245142f76190a938c0d73afa0a6dda5 diff --git a/build.gradle b/build.gradle index d20bebae76..0e33fdf429 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' - classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' +// classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' } } @@ -32,7 +32,7 @@ allprojects { jcenter() mavenCentral() maven { url 'https://jitpack.io' } - maven { url "$flutter_io/download.flutter.io" }// Flutter +// maven { url "$flutter_io/download.flutter.io" }// Flutter maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK maven { url 'https://dl.bintray.com/aweme-open-sdk-team/public' } //tiktokSDK maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } diff --git a/dependencies.gradle b/dependencies.gradle index 9ac47618e9..f821f19150 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -112,7 +112,4 @@ ext { shapeOfView = "1.4.7" sentry = "3.2.0" - - flutter_io = System.env.FLUTTER_STORAGE_BASE_URL - ?: "https://storage.googleapis.com" } \ No newline at end of file diff --git a/init.flutter.gradle b/init.flutter.gradle new file mode 100644 index 0000000000..416e69aacf --- /dev/null +++ b/init.flutter.gradle @@ -0,0 +1,35 @@ +// Gradle初始化脚本(Flutter注入) +apply from: "init.gradle" +allprojects { project -> + buildscript { + ext.flutter_io = System.env.FLUTTER_STORAGE_BASE_URL + ?: "https://storage.googleapis.com" + ext.lancet_version = 'v1.0.6' + repositories { + maven { url 'https://jitpack.io' } + } + dependencies { + classpath "com.github.axen1314.lancet:lancet-plugin:$lancet_version" + } + } + repositories { + maven { url "$flutter_io/download.flutter.io" }// Flutter + } + project.afterEvaluate { + if (project.name == "app") { + Project flutterProject = project.rootProject.findProject(":flutter") + if (flutterProject == null) { + project.logger.error("Flutter project not found!") + } else { + project.apply plugin: 'me.ele.lancet' + project.dependencies { + implementation (flutterProject, { + exclude group: 'androidx.swiperefreshlayout' + }) + compileOnly "com.github.axen1314.lancet:lancet-base:$lancet_version" + } + } + + } + } +} \ No newline at end of file From 7ab424f107b381f8519ca991bac63ef11d277b8b Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 30 Nov 2021 09:35:32 +0800 Subject: [PATCH 81/89] =?UTF-8?q?Updated=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 ------- build.gradle | 4 +--- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 21f1c43a1b..2b5188f9f9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' -//apply plugin: 'me.ele.lancet' //apply plugin: 'io.sentry.android.gradle' apply plugin: 'AndResGuard' @@ -368,12 +367,6 @@ dependencies { // implementation project(':libraries:WechatShare') // implementation project(':libraries:im') implementation project(':libraries:Matisse') - - // Flutter模块 -// implementation(project(':flutter'), { -// exclude group: 'androidx.swiperefreshlayout' -// }) -// compileOnly 'com.github.axen1314.lancet:lancet-base:v1.0.6'// AOP框架 } File propFile = file('sign.properties') if (propFile.exists()) { diff --git a/build.gradle b/build.gradle index 0e33fdf429..f614c0a441 100644 --- a/build.gradle +++ b/build.gradle @@ -4,8 +4,8 @@ apply from: 'dependencies.gradle' buildscript { ext.kotlin_version = '1.4.20' + repositories { - // 阿里云仓库 google() jcenter() mavenCentral() @@ -22,7 +22,6 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 使用了 1.2.21 在蓝叠模拟器上无法进入首页? 但是不使用又会出现触发 V3 签名... classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' -// classpath 'com.github.axen1314.lancet:lancet-plugin:v1.0.6' } } @@ -32,7 +31,6 @@ allprojects { jcenter() mavenCentral() maven { url 'https://jitpack.io' } -// maven { url "$flutter_io/download.flutter.io" }// Flutter maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK maven { url 'https://dl.bintray.com/aweme-open-sdk-team/public' } //tiktokSDK maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } From 1942cf8ce98149c5d027b863bef0db8503e3f9ba Mon Sep 17 00:00:00 2001 From: axen Date: Tue, 30 Nov 2021 14:45:52 +0800 Subject: [PATCH 82/89] =?UTF-8?q?Added=20=E6=B7=BB=E5=8A=A0Tracker?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=20Updated=20Lancet=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E4=BE=9D=E8=B5=96=E5=A3=B0=E6=98=8E=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=9B=9Eapp=E7=9A=84build.gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 ++ app/src/main/java/com/halo/assistant/HaloApp.java | 2 ++ assistant_flutter | 2 +- dependencies.gradle | 2 ++ init.flutter.gradle | 3 ++- 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2b5188f9f9..363df5dc96 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -359,6 +359,8 @@ dependencies { implementation "io.github.sinaweibosdk:core:${weiboSDK}" + compileOnly "com.github.axen1314.lancet:lancet-base:$lancet_version" + implementation project(':libraries:LGLibrary') // implementation project(':libraries:MTA') implementation project(':libraries:QQShare') diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 868ceacdd8..466267a384 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -22,6 +22,7 @@ import com.gh.common.constant.Constants; import com.gh.common.exposure.ExposureManager; import com.gh.common.filter.RegionSettingHelper; import com.gh.common.loghub.LoghubUtils; +import com.gh.common.tracker.Tracker; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceUtils; import com.gh.common.util.DownloadNotificationHelper; @@ -155,6 +156,7 @@ public class HaloApp extends MultiDexApplication { AppExecutor.getIoExecutor().execute(() -> { initDataHelper(); + Tracker.init(this); // 初始化 Fresco(BigImageViewer 已包含Fresco) if (!ImageUtils.isFrescoInitialized()) { diff --git a/assistant_flutter b/assistant_flutter index 7f46e91b72..12fede1729 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 7f46e91b7245142f76190a938c0d73afa0a6dda5 +Subproject commit 12fede1729f447980e9079e7c81f1ada9c446f45 diff --git a/dependencies.gradle b/dependencies.gradle index f821f19150..9eb0a2fdbe 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -112,4 +112,6 @@ ext { shapeOfView = "1.4.7" sentry = "3.2.0" + + lancet_version = "v1.0.6" } \ No newline at end of file diff --git a/init.flutter.gradle b/init.flutter.gradle index 416e69aacf..dc9edf6103 100644 --- a/init.flutter.gradle +++ b/init.flutter.gradle @@ -1,10 +1,11 @@ // Gradle初始化脚本(Flutter注入) apply from: "init.gradle" +apply from: "dependencies.gradle" + allprojects { project -> buildscript { ext.flutter_io = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com" - ext.lancet_version = 'v1.0.6' repositories { maven { url 'https://jitpack.io' } } From 1c1c271195520369995c5098675f2179a0756d51 Mon Sep 17 00:00:00 2001 From: jack <1484288157@qq.com> Date: Tue, 30 Nov 2021 15:50:34 +0800 Subject: [PATCH 83/89] =?UTF-8?q?=E3=80=90=E5=85=89=E7=8E=AF=E5=8A=A9?= =?UTF-8?q?=E6=89=8BV5.5.0=E3=80=91=E6=96=B0=E7=A4=BE=E5=8C=BA=E8=BF=90?= =?UTF-8?q?=E8=90=A5=E6=B5=8B=E8=AF=95=E9=97=AE=E9=A2=98=E6=B1=87=E6=80=BB?= =?UTF-8?q?=EF=BC=882=EF=BC=898=20https://git.ghzs.com/pm/halo-app-issues/?= =?UTF-8?q?-/issues/1636?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qa/comment/NewCommentFragment.kt | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt index 13dff479ff..9d94eb2b46 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt @@ -439,19 +439,24 @@ open class NewCommentFragment : ListFragment } } R.id.imageBtn -> { - if (mViewModel.pictureList.size >= 9) { - toast("至多上传9张") - return - } - val maxChooseCount = 9 - mViewModel.pictureList.size - val intent = LocalMediaActivity.getIntent( - requireContext(), - LocalMediaActivity.ChooseType.IMAGE, - maxChooseCount, - "评论列表" - ) - Util_System_Keyboard.hideSoftKeyboard(requireActivity()) - startActivityForResult(intent, REQUEST_CODE_IMAGE) + PermissionHelper.checkStoragePermissionBeforeAction( + requireActivity(), object : EmptyCallback { + override fun onCallback() { + if (mViewModel.pictureList.size >= 9) { + toast("至多上传9张") + return + } + val maxChooseCount = 9 - mViewModel.pictureList.size + val intent = LocalMediaActivity.getIntent( + requireContext(), + LocalMediaActivity.ChooseType.IMAGE, + maxChooseCount, + "评论列表" + ) + Util_System_Keyboard.hideSoftKeyboard(requireActivity()) + startActivityForResult(intent, REQUEST_CODE_IMAGE) + } + }) } } } From e08ba51951ab1517f3e7f8ee37e283b0e3be73c4 Mon Sep 17 00:00:00 2001 From: juntao Date: Tue, 30 Nov 2021 16:35:47 +0800 Subject: [PATCH 84/89] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20jenkins=20flutter=20?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/jenkins_flutter_build.sh | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 scripts/jenkins_flutter_build.sh diff --git a/scripts/jenkins_flutter_build.sh b/scripts/jenkins_flutter_build.sh new file mode 100755 index 0000000000..d897539988 --- /dev/null +++ b/scripts/jenkins_flutter_build.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# @author juntao +# @2021.11.30 + +version=$(awk -v FS="versionName = " 'NF>1{print $2}' dependencies.gradle | sed "s/\"//g") +versionCode=$(awk -v FS="versionCode = " 'NF>1{print $2}' dependencies.gradle | sed "s/\"//g") +build_time=$(TZ=Asia/Shanghai date +'%Y-%m%d-%H%M') +build_time_without_divider=$(TZ=Asia/Shanghai date +'%Y%m%d%H%M')L + +git checkout app/build.gradle +git checkout gradle.properties + +./gradlew --stop +./gradlew clean + +cd assistant_flutter + +flutter pub get + +cd .. + +sed -i 's/buildConfigField "long", "BUILD_TIME", "0"/buildConfigField "long", "BUILD_TIME", '"\"${build_time_without_divider}\""'/g' app/build.gradle + +./gradlew rIR -I init.flutter.gradle +if [ ! -f app/build/outputs/apk/internal/release/app-internal-release.apk ]; then + ./gradlew rIR -I init.gradle +fi +mv app/build/outputs/apk/internal/release/app-internal-release.apk app/build/tmp/${version}-${versionCode}-internal-${build_time}.apk + +./gradlew rPR -I init.flutter.gradle +if [ ! -f app/build/outputs/apk/publish/release/app-publish-release.apk ]; then + ./gradlew rPR -I init.gradle +fi +mv app/build/outputs/apk/publish/release/app-publish-release.apk app/build/tmp/${version}-${versionCode}-publish-${build_time}.apk + +git checkout app/build.gradle +git checkout gradle.properties \ No newline at end of file From 39ba62e5bd761f2fe92ad18bdcdf5ba46189cb08 Mon Sep 17 00:00:00 2001 From: juntao Date: Wed, 1 Dec 2021 09:28:30 +0800 Subject: [PATCH 85/89] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B7=B7=20flutter=20?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++++ scripts/jenkins_flutter_build.sh | 15 ++++++++++++--- settings.gradle | 7 ++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 363df5dc96..7575f74890 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -215,6 +215,10 @@ android { buildConfigField "String", "BUGLY_APPID", "\"${BUGLY_APPID}\"" } } + + lintOptions { + checkReleaseBuilds false + } } repositories { diff --git a/scripts/jenkins_flutter_build.sh b/scripts/jenkins_flutter_build.sh index d897539988..2cd7c74eec 100755 --- a/scripts/jenkins_flutter_build.sh +++ b/scripts/jenkins_flutter_build.sh @@ -10,8 +10,13 @@ build_time_without_divider=$(TZ=Asia/Shanghai date +'%Y%m%d%H%M')L git checkout app/build.gradle git checkout gradle.properties -./gradlew --stop -./gradlew clean +if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' '10 a setBinding(new Binding([gradle: this]))' settings.gradle + sed -i '' '11 a evaluate(new File(settingsDir, "assistant_flutter/.android/include_flutter.groovy"))' settings.gradle +else + sed -i '10 a setBinding(new Binding([gradle: this]))' settings.gradle + sed -i '11 a evaluate(new File(settingsDir, "assistant_flutter/.android/include_flutter.groovy"))' settings.gradle +fi cd assistant_flutter @@ -19,6 +24,9 @@ flutter pub get cd .. +./gradlew --stop +./gradlew clean + sed -i 's/buildConfigField "long", "BUILD_TIME", "0"/buildConfigField "long", "BUILD_TIME", '"\"${build_time_without_divider}\""'/g' app/build.gradle ./gradlew rIR -I init.flutter.gradle @@ -34,4 +42,5 @@ fi mv app/build/outputs/apk/publish/release/app-publish-release.apk app/build/tmp/${version}-${versionCode}-publish-${build_time}.apk git checkout app/build.gradle -git checkout gradle.properties \ No newline at end of file +git checkout gradle.properties +git checkout settings.gradle \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index fc6b67150a..9d1351d890 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,9 +1,4 @@ include ':app' -setBinding(new Binding([gradle: this])) -evaluate(new File( - settingsDir, - 'assistant_flutter/.android/include_flutter.groovy' -)) //include ':libraries:im' include ':libraries:LGLibrary' //include ':libraries:MTA' @@ -12,3 +7,5 @@ include ':libraries:QQShare' //include ':libraries:UmengPush' //include ':libraries:WechatShare' include ':libraries:Matisse' +//setBinding(new Binding([gradle: this])) +//evaluate(new File(settingsDir, "assistant_flutter/.android/include_flutter.groovy")) From 998cfb9233866e066a3865d9fa5baba2def7340b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=20=E7=A5=A5=E4=BF=8A?= Date: Thu, 2 Dec 2021 15:00:37 +0800 Subject: [PATCH 86/89] Feature flutter game comments --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 12fede1729..3d3fb30a7c 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 12fede1729f447980e9079e7c81f1ada9c446f45 +Subproject commit 3d3fb30a7ca46c2f4c43d9bc8a7d5a9a05861de5 From 9ab5b67ae7a53f7e7ed11b68b229d3bc2bad4329 Mon Sep 17 00:00:00 2001 From: juntao Date: Fri, 3 Dec 2021 18:07:48 +0800 Subject: [PATCH 87/89] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Sentry=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=92=8C=20DSN=20=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/java/com/gh/common/util/DataUtils.java | 2 +- dependencies.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7575f74890..faf62b9e5f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -343,7 +343,7 @@ dependencies { implementation "net.lingala.zip4j:zip4j:${zip4j}" // plugin 需要字符串,故不能用值 - implementation "io.sentry:sentry-android:3.2.0" + implementation "io.sentry:sentry-android:4.3.0" implementation("com.github.piasy:BigImageViewer:${bigImageViewer}", { exclude group: 'com.squareup.okhttp3' diff --git a/app/src/main/java/com/gh/common/util/DataUtils.java b/app/src/main/java/com/gh/common/util/DataUtils.java index c7aa2b056a..15cffcfb54 100644 --- a/app/src/main/java/com/gh/common/util/DataUtils.java +++ b/app/src/main/java/com/gh/common/util/DataUtils.java @@ -133,7 +133,7 @@ public class DataUtils { options.setDebug(BuildConfig.DEBUG); options.setEnableSessionTracking(true); options.setEnvironment(BuildConfig.FLAVOR); - options.setDsn("https://6b1caf0d17c1408e8680f3f73ff80bd0@sentry.ghzs.com/22"); + options.setDsn("https://6b1caf0d17c1408e8680f3f73ff80bd0@sentry.shanqu.cc/22"); options.setBeforeSend((event, hint) -> { if (BuildConfig.DEBUG) { diff --git a/dependencies.gradle b/dependencies.gradle index 9eb0a2fdbe..1db7e00114 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -111,7 +111,7 @@ ext { easyFloat = "1.3.4" shapeOfView = "1.4.7" - sentry = "3.2.0" + sentry = "4.3.0" lancet_version = "v1.0.6" } \ No newline at end of file From c573fc3b8f929125cf2096087f5c94f2e912db76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=20=E7=A5=A5=E4=BF=8A?= Date: Mon, 6 Dec 2021 09:40:20 +0800 Subject: [PATCH 88/89] =?UTF-8?q?Fixed=20Sentry=E6=8F=92=E4=BB=B6=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E9=97=AE=E9=A2=98=20Updated=20=E6=9B=B4=E6=96=B0Sentr?= =?UTF-8?q?y=20DSN=E5=9C=B0=E5=9D=80=20Added=20=E6=B8=B8=E6=88=8F=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=A4=A7=E5=9B=BE=E9=95=BF=E6=8C=89=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assistant_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assistant_flutter b/assistant_flutter index 3d3fb30a7c..b86b049973 160000 --- a/assistant_flutter +++ b/assistant_flutter @@ -1 +1 @@ -Subproject commit 3d3fb30a7ca46c2f4c43d9bc8a7d5a9a05861de5 +Subproject commit b86b049973379af1ad6abd01c8f7fa56cb55641f From f6b5e5ecc774cb0485f4d63f185066638beacbb0 Mon Sep 17 00:00:00 2001 From: juntao Date: Fri, 19 Nov 2021 21:08:50 +0800 Subject: [PATCH 89/89] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E7=83=AD=E9=97=A8=E5=9B=9E=E7=AD=94?= =?UTF-8?q?=E7=9A=84=E6=B8=B8=E6=88=8F=E4=B8=93=E5=8C=BA=E4=BC=9A=E9=97=AA?= =?UTF-8?q?=E9=80=80=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/gamedetail/fuli/FuLiFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiFragment.kt index 5f3ffd3df4..78949148ee 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiFragment.kt @@ -58,8 +58,6 @@ class FuLiFragment : LazyFragment(), IScrollable { } override fun onFragmentFirstVisible() { - super.onFragmentFirstVisible() - val gameEntity = arguments?.getParcelable(GameEntity.TAG) as? GameEntity val gameDetailFactory = GameDetailViewModel.Factory(HaloApp.getInstance().application, gameEntity?.id, gameEntity) shouldScroolToLibao = arguments?.getBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO) ?: false @@ -67,6 +65,8 @@ class FuLiFragment : LazyFragment(), IScrollable { mGameDetailViewModel = viewModelProviderFromParent(gameDetailFactory) mFuLiViewModel = viewModelProvider() + super.onFragmentFirstVisible() + if (gameEntity != null) { mFuLiViewModel?.updateGameEntity(gameEntity) }