From 62614236b2edca67dd2ce8368a7615df39e6504e Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 12 Feb 2020 17:57:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=A1=E7=89=87=E6=BB=91?= =?UTF-8?q?=E5=8A=A8=E6=80=A7=E8=83=BD=EF=BC=9A=E6=8E=A2=E8=B7=AF=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E6=92=AD=E6=94=BE=E3=80=81C=E4=BD=8D=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E9=80=BB=E8=BE=91=EF=BC=9B=E5=AE=9A=E5=88=B6=E5=8C=96?= =?UTF-8?q?app=E5=88=97=E8=A1=A8=EF=BC=9B=E4=BF=AE=E6=94=B9=E5=B0=8F?= =?UTF-8?q?=E6=99=BA=E5=8A=A8=E7=94=BB=E7=AD=96=E7=95=A5=EF=BC=9B=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E4=BC=98=E5=8C=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/apps/AppFilterImpl.java | 9 + .../com/mogo/module/apps/AppsAdapter.java | 6 +- .../com/mogo/module/apps/AppsPresenter.java | 3 + .../com/mogo/module/apps/model/AppEnum.java | 90 ++++++++ .../mogo/module/apps/model/AppEnumHelper.java | 34 +++ .../com/mogo/module/apps/model/AppInfo.java | 14 +- .../com/mogo/module/apps/model/AppsModel.java | 4 +- .../mogo/module/apps/model/CardAppInfo.java | 17 -- .../module/extensions/ExtensionsFragment.java | 16 +- .../module/extensions/anim/JSurfaceView.java | 1 + .../drawable/module_ext_frame_anim_voice.xml | 207 ++++++++++++++++++ .../layout/module_ext_layout_extensions.xml | 12 +- .../com/mogo/module/main/MainActivity.java | 2 +- .../module/main/cards/MogoModulesManager.java | 201 ++++++++--------- .../module/service/MogoServiceProvider.java | 21 +- .../tanlu/fragment/TanluCardViewFragment.java | 64 +++++- .../tanlu/view/AutoZoomInImageView.java | 25 ++- 17 files changed, 563 insertions(+), 163 deletions(-) create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java delete mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/CardAppInfo.java create mode 100644 modules/mogo-module-extensions/src/main/res/drawable/module_ext_frame_anim_voice.xml diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java index d4e8a280d8..d271162e24 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java @@ -4,8 +4,13 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; +import com.mogo.module.apps.model.AppEnum; +import com.mogo.module.apps.model.AppEnumHelper; + import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author congtaowang @@ -18,6 +23,7 @@ public class AppFilterImpl implements AppFilter { private final Context mContext; private List< String > mFilterPackages; + public AppFilterImpl( Context context ) { mContext = context; final String[] values = context.getResources().getStringArray( R.array.module_apps_array_filter_packages ); @@ -37,6 +43,9 @@ public class AppFilterImpl implements AppFilter { if ( noLaunchIntent( packageInfo ) ) { return true; } + if ( !AppEnumHelper.isCustomizedApp( packageInfo.packageName ) ) { + return true; + } return false; } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java index 88eb41f68b..b3fdeed31e 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java @@ -56,7 +56,11 @@ public class AppsAdapter extends BaseAdapter { holder = ( ( AppViewHolder ) convertView.getTag() ); } AppInfo appInfo = getItem( position ); - holder.mIcon.setImageDrawable( appInfo.getIcon() ); + if ( appInfo.getIconResId() <= 0 ) { + holder.mIcon.setImageDrawable( appInfo.getIcon() ); + } else { + holder.mIcon.setImageResource( appInfo.getIconResId() ); + } holder.mName.setText( appInfo.getName() ); return holder.mItemView; } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java index 8a640f2ab7..3b86efe5d1 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java @@ -15,6 +15,7 @@ import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.logger.Logger; import java.util.HashMap; import java.util.Map; @@ -58,6 +59,8 @@ public class AppsPresenter extends Presenter< AppsView > { private void renderAppsList() { ThreadPoolService.execute( () -> { AppsModel.getInstance( getContext() ).load( appInfoList -> { + + Logger.d( TAG, "apps: %s", appInfoList ); UiThreadHandler.post( () -> { if ( mView != null ) { mView.renderApps( appInfoList ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java new file mode 100644 index 0000000000..dbdf93576a --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -0,0 +1,90 @@ +package com.mogo.module.apps.model; + +/** + * @author congtaowang + * @since 2020-02-12 + *

+ * 定制化的 app 列表 + *

+ *

+ * 自研类:QQ音乐、车聊聊、探路、新鲜事、福利、蘑菇小队、行车记录仪、懒人听书、一键清理、系统升级 + * 第三方:车机微信助手、爱奇艺、喜马拉雅 + * 基础类:均衡器、方控学习、蓝牙、FM、车载设置、AUX + */ +public enum AppEnum { + + //"QQ音乐", + QQMusic( "com.pvetec.musics", 0 ), + + //"车聊聊", + Im( "com.zhidao.imdemo", 0 ), + + //"探路", + RoadCondition( "com.zhidao.roadcondition", 0 ), + RoadConditionSlit( "com.zhidao.roadcondition.split", 0 ), + + //"福利", + Welfare( "com.zhidaohulian.welfare.car", 0 ), + + //"蘑菇小队", + Fleet( "com.zhidao.fleet", 0 ), + + //"行车记录仪", + CarCorder( "com.zhidao.carcorder", 0 ), + + //"懒人听书", + Lrts( "com.zhidao.lrts", 0 ), + + //"一键清理", + CleanMaster( "com.zhidao.cleanmaster", 0 ), + + //"系统升级", + Fota( "com.abupdate.fota_demo_iot", 0 ), + + //"微信车机助手", + WecahtHelper( "com.zhidao.wechathelper", 0 ), + + //"爱奇艺HD", + Qiyi( "com.qiyi.video.pad", 0 ), + + //"喜马拉雅", + Ximalaya( "com.ximalaya.ting.android.car", 0 ), + + //"均衡器", + Equlizer( "com.zhidao.equalizer", 0 ), + + //"方控学习", + SteerProduct( "com.zd.steerproduct", 0 ), + + //"蓝牙音乐", + BTMusic( "com.nwd.bt.music", 0 ), + + //"车载设置", + CarSettings( "com.zhidao.settings", 0 ), + + //"AUX", + AUX( "com.nwd.auxin", 0 ), + + //FM + FM( " com.nwd.radio", 0 ), + + // 新鲜事 + FreshThins( "com.zhidao.fresh.things", 0 ), + ; + + private String mPkg; + private int mIconResId; + + AppEnum( String pkg, int iconResId ) { + this.mPkg = pkg; + this.mIconResId = iconResId; + } + + public String getPkg() { + return mPkg; + } + + public int getIconResId() { + return mIconResId; + } +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java new file mode 100644 index 0000000000..866310e26c --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java @@ -0,0 +1,34 @@ +package com.mogo.module.apps.model; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author congtaowang + * @since 2020-02-12 + *

+ * 定制化的app + */ +public class AppEnumHelper { + + private static Map< String, AppEnum > sCustomizedApps = new HashMap<>(); + + static { + AppEnum[] customizedApps = AppEnum.values(); + for ( AppEnum customizedApp : customizedApps ) { + sCustomizedApps.put( customizedApp.getPkg(), customizedApp ); + } + } + + public static boolean isCustomizedApp( String pkg ) { + return sCustomizedApps.containsKey( pkg ); + } + + public static int getCustomizedAppIconResId( String pkg ) { + AppEnum appEnum = sCustomizedApps.get( pkg ); + if ( appEnum != null ) { + return appEnum.getIconResId(); + } + return 0; + } +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java index 3f0896a955..134cb0b33f 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java @@ -15,13 +15,19 @@ public class AppInfo { private final String mVersionName; private final int mVersionCode; private final Drawable mIcon; + private final int mIconResId; - public AppInfo( String name, String mPackageName, String mVersionName, int versionCode, Drawable icon ) { - this.mName = name; + public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId ) { + this.mName = mName; this.mPackageName = mPackageName; this.mVersionName = mVersionName; - this.mVersionCode = versionCode; - this.mIcon = icon; + this.mVersionCode = mVersionCode; + this.mIcon = mIcon; + this.mIconResId = mIconResId; + } + + public int getIconResId() { + return mIconResId; } public String getName() { diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java index f0d6b0b6c4..cb4386e134 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java @@ -79,7 +79,7 @@ public class AppsModel { String versionName = packageInfo.versionName; int versionCode = packageInfo.versionCode; Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager ); - AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon ); + AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, AppEnumHelper.getCustomizedAppIconResId( packageName ) ); mPagedApps.get( page ).add( appInfo ); } if ( callback != null ) { @@ -106,7 +106,7 @@ public class AppsModel { String versionName = packageInfo.versionName; int versionCode = packageInfo.versionCode; Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager ); - AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon ); + AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, AppEnumHelper.getCustomizedAppIconResId( packageName ) ); int pageIndex = getPageIndex( packageName, true ); if ( !mPagedApps.containsKey( pageIndex ) ) { mPagedApps.put( pageIndex, new ArrayList<>() ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/CardAppInfo.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/CardAppInfo.java deleted file mode 100644 index 50a5fa55f6..0000000000 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/CardAppInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.module.apps.model; - -/** - * @author congtaowang - * @since 2020-02-09 - *

- * 描述 - */ -public class CardAppInfo extends AppInfo { - - private String mCardType; - - public CardAppInfo( AppInfo app, String cardType ) { - super( app.getName(), app.getPackageName(), app.getVersionName(), app.getVersionCode(), app.getIcon() ); - this.mCardType = cardType; - } -} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index edd6cc95c4..4aa2e5b311 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -1,5 +1,6 @@ package com.mogo.module.extensions; +import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; @@ -30,7 +31,8 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private static final String TAG = "ExtensionsFragment"; - private JSurfaceView mVoiceIcon; + private ImageView mVoiceIcon; + private AnimationDrawable mAnim; private TextView mVoiceMsg; private TextView mTime; @@ -55,6 +57,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override protected void initViews() { mVoiceIcon = findViewById( R.id.module_ext_id_voice ); + mAnim = ( AnimationDrawable ) mVoiceIcon.getBackground(); mVoiceMsg = findViewById( R.id.module_ext_id_voice_msg ); mVoiceIcon.setOnClickListener( view -> { @@ -79,7 +82,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP } ); mMsgCounter = findViewById( R.id.module_ext_id_msg_counter ); - mVoiceIcon.setFrames( AnimRes.sRes ); +// mVoiceIcon.setFrames( AnimRes.sRes ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); mMogoFragmentManager.addMainFragmentStackTransactionListener( size -> { @@ -101,19 +104,22 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); - mVoiceIcon.startAnim(); } @Override public void onResume() { super.onResume(); - mVoiceIcon.startAnim(); + if ( mAnim != null ) { + mAnim.start(); + } } @Override public void onStop() { super.onStop(); - mVoiceIcon.stop(); + if ( mAnim != null ) { + mAnim.stop(); + } } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java index ccf54baede..5d89ecdddc 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java @@ -82,6 +82,7 @@ public class JSurfaceView extends SurfaceView implements Runnable, SurfaceHolder } bRunning = true; mThread = new Thread( this ); + mThread.setName( TAG + "thread" ); mThread.start(); } diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_frame_anim_voice.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_frame_anim_voice.xml new file mode 100644 index 0000000000..f4844fcff0 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_frame_anim_voice.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml index e454b994d9..f3d6298784 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml @@ -8,13 +8,17 @@ android:paddingLeft="@dimen/module_ext_paddingLeft" android:paddingRight="@dimen/module_ext_paddingRight"> - + app:layout_constraintTop_toTopOf="parent" + android:layout_width="@dimen/module_ext_voice_icon_width" + android:layout_height="@dimen/module_ext_voice_icon_height" + android:background="@drawable/module_ext_frame_anim_voice"/> + + + impleme private void startLocation() { mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() ); mLocationClient.addLocationListener( this ); - mLocationClient.start(); + mLocationClient.start(10_000L); } private void loadContainerModules() { diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index 2ed5a864a5..d78ff9e0b8 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -1,13 +1,10 @@ package com.mogo.module.main.cards; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.text.TextUtils; import android.util.Log; import android.view.MotionEvent; -import android.widget.TextView; import androidx.fragment.app.Fragment; @@ -29,9 +26,11 @@ import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.main.MainActivity; import com.mogo.module.main.assist.MapBroadCastHelper; import com.mogo.module.main.registercenter.MogoRegisterCenterHandler; +import com.mogo.module.service.receiver.MogoReceiver; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; -import com.mogo.service.map.IMogoMapService; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.ModuleType; @@ -58,24 +57,26 @@ import java.util.Map; public class MogoModulesManager implements MogoModulesHandler, IMogoMapListener, IMogoNaviListener, - IMogoLocationListener { + IMogoLocationListener, + IMogoIntentListener { private static final String TAG = "MogoModulesManager"; private MainActivity mActivity; private Map< MogoModule, IMogoModuleProvider > mModuleProviders = new HashMap<>(); + // 空间换效率 + private Map< String, IMogoModuleProvider > mModuleNameProviders = new HashMap<>(); private IMogoAnalytics mTrackManager; - private IMogoMapService mapService; private String mEnableModuleName = null; private Runnable mMapLoadedCallback; - private BroadcastReceiver mReceiver; - public static final String KEY_SORTED_CARD_MODULES = "sortedCards"; private List< String > mSortedCards = new ArrayList<>(); + private IMogoIntentManager mMogoIntentManager; + public MogoModulesManager( MainActivity activity ) { if ( activity == null ) { throw new NullPointerException( "activity can't be null." ); @@ -85,9 +86,9 @@ public class MogoModulesManager implements MogoModulesHandler, .build( MogoServicePaths.PATH_UTILS_ANALYTICS ) .navigation(); - mapService = ( IMogoMapService ) ARouter.getInstance().build( - MogoServicePaths.PATH_SERVICES_MAP - ).navigation(); + mMogoIntentManager = ( IMogoIntentManager ) ARouter.getInstance() + .build( MogoServicePaths.PATH_INTENT_MANAGER ) + .navigation(); registerReceiver(); } @@ -108,6 +109,7 @@ public class MogoModulesManager implements MogoModulesHandler, IMogoModuleProvider provider = load( module.getPath() ); if ( provider != null ) { mModuleProviders.put( module, provider ); + mModuleNameProviders.put( module.getName(), provider ); } } } @@ -236,50 +238,34 @@ public class MogoModulesManager implements MogoModulesHandler, // 仅操作上一个模块和当前模块 Iterator< IMogoModuleProvider > iterator = mModuleProviders.values().iterator(); int counter = 0; - while ( iterator.hasNext() ) { - IMogoModuleProvider provider = iterator.next(); - if ( provider == null ) { - continue; - } - if ( provider.getType() != ModuleType.TYPE_CARD_FRAGMENT ) { - continue; - } - if ( TextUtils.equals( mEnableModuleName, provider.getModuleName() ) ) { - final IMogoModuleLifecycle lifecycle = - MogoRegisterCenterHandler.getInstance().getLifecycleListener( mEnableModuleName ); - if ( lifecycle != null ) { - try { - final long start = System.currentTimeMillis(); - lifecycle.onDisable(); - Logger.i( TAG, - "set %s module disable event cost " + ( System.currentTimeMillis() - - start ) + "ms", mEnableModuleName ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } + + // 上一个卡片设置为 disable + IMogoModuleProvider prev = mModuleNameProviders.get( mEnableModuleName ); + if ( prev != null ) { + final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( mEnableModuleName ); + if ( lifecycle != null ) { + try { + final long start = System.currentTimeMillis(); + lifecycle.onDisable(); + Logger.i( TAG, "set %s module disable event cost " + ( System.currentTimeMillis() - start ) + "ms", mEnableModuleName ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } - counter++; - continue; } - if ( TextUtils.equals( module, provider.getModuleName() ) ) { - final IMogoModuleLifecycle lifecycle = - MogoRegisterCenterHandler.getInstance().getLifecycleListener( module ); - if ( lifecycle != null ) { - try { - final long start = System.currentTimeMillis(); - lifecycle.onPerform(); - Logger.i( TAG, - "set %s module perform event cost " + ( System.currentTimeMillis() - - start ) + "ms", module ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } + } + + // 当前卡片设置为 perform + IMogoModuleProvider current = mModuleNameProviders.get( module ); + if ( current != null ) { + final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( module ); + if ( lifecycle != null ) { + try { + final long start = System.currentTimeMillis(); + lifecycle.onPerform(); + Logger.i( TAG, "set %s module perform event cost " + ( System.currentTimeMillis() - start ) + "ms", module ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } - counter++; - continue; - } - if ( counter == 2 ) { - break; } } @@ -287,7 +273,7 @@ public class MogoModulesManager implements MogoModulesHandler, mSortedCards.remove( mEnableModuleName ); mSortedCards.add( 0, mEnableModuleName ); SharedPrefsMgr.getInstance( getContext() ).putString( KEY_SORTED_CARD_MODULES, GsonUtil.jsonFromObject( mSortedCards ) ); - Log.i(TAG, "enable & disable card cost " + (System.currentTimeMillis() - start1) + "ms"); + Log.i( TAG, "enable & disable card cost " + ( System.currentTimeMillis() - start1 ) + "ms" ); } @Override @@ -300,8 +286,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onTouch( MotionEvent motionEvent ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -319,8 +304,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onPOIClick( MogoPoi poi ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -338,8 +322,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onMapClick( MogoLatLng latLng ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -357,8 +340,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onLockMap( boolean isLock ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -376,8 +358,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onMapModeChanged( EnumMapUI ui ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -395,8 +376,9 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) { - Iterator< IMogoMapListener > iterator = - MogoRegisterCenterHandler.getInstance().getMapListeners(); + + final long start = System.currentTimeMillis(); + Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); if ( iterator == null ) { return; } @@ -410,12 +392,12 @@ public class MogoModulesManager implements MogoModulesHandler, } } } + Log.i( TAG, "onMapChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" ); } @Override public void onInitNaviFailure() { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -433,8 +415,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onInitNaviSuccess() { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -453,8 +434,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { MapBroadCastHelper.getInstance( getApplicationContext() ).notifyXiaozhi( naviinfo ); - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; @@ -473,8 +453,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onStartNavi() { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); mTrackManager.track( "Navigation_begin", new HashMap<>() ); MapBroadCastHelper.getInstance( getApplicationContext() ).startNavi(); @@ -497,8 +476,7 @@ public class MogoModulesManager implements MogoModulesHandler, public void onStopNavi() { mTrackManager.track( "Navigation_end", new HashMap<>() ); MapBroadCastHelper.getInstance( getApplicationContext() ).stopNavi(); - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -516,8 +494,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onCalculateSuccess() { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -535,8 +512,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onoCalculateFailed() { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -554,8 +530,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onUpdateTraffic( MogoTraffic traffic ) { - Iterator< IMogoNaviListener > iterator = - MogoRegisterCenterHandler.getInstance().getNaviListeners(); + Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); if ( iterator == null ) { return; } @@ -573,8 +548,8 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onLocationChanged( MogoLocation location ) { - Iterator< IMogoLocationListener > iterator = - MogoRegisterCenterHandler.getInstance().getLocationListeners(); + final long start = System.currentTimeMillis(); + Iterator< IMogoLocationListener > iterator = MogoRegisterCenterHandler.getInstance().getLocationListeners(); if ( iterator == null ) { return; } @@ -588,40 +563,51 @@ public class MogoModulesManager implements MogoModulesHandler, } } } + Log.i( TAG, "onLocationChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" ); } public void registerReceiver() { - mReceiver = new BroadcastReceiver() { - @Override - public void onReceive( Context context, Intent intent ) { - final String action = intent.getAction(); - if ( TextUtils.equals( action, Intent.ACTION_POWER_CONNECTED ) ) { - Iterator< IMogoModuleLifecycle > iterator = - MogoRegisterCenterHandler.getInstance().getLifecycleListeners(); - if ( iterator.hasNext() ) { - iterator.next().accOn(); - } - } else if ( TextUtils.equals( action, Intent.ACTION_POWER_DISCONNECTED ) ) { + mMogoIntentManager.registerIntentListener( Intent.ACTION_POWER_CONNECTED, this ); + mMogoIntentManager.registerIntentListener( Intent.ACTION_POWER_DISCONNECTED, this ); + mMogoIntentManager.registerIntentListener( MogoReceiver.ACTION_NWD_ACC, this ); + } + @Override + public void onIntentReceived( String intentStr, Intent intent ) { + + Iterator< IMogoModuleLifecycle > iterator = MogoRegisterCenterHandler.getInstance().getLifecycleListeners(); + if ( Intent.ACTION_POWER_CONNECTED.equals( intentStr ) ) { + while ( iterator.hasNext() ) { + IMogoModuleLifecycle lifecycle = iterator.next(); + if ( lifecycle != null ) { + lifecycle.accOn(); } } - }; - IntentFilter inputFilter = new IntentFilter(); - inputFilter.addAction( Intent.ACTION_POWER_CONNECTED ); - inputFilter.addAction( Intent.ACTION_POWER_DISCONNECTED ); - getApplicationContext().registerReceiver( mReceiver, inputFilter ); + } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( intentStr ) ) { + } else if ( MogoReceiver.ACTION_NWD_ACC.equals( intentStr ) ) { + int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 ); + if ( state == 1 ) { + while ( iterator.hasNext() ) { + IMogoModuleLifecycle lifecycle = iterator.next(); + if ( lifecycle != null ) { + lifecycle.accOn(); + } + } + } + } + + if ( iterator.hasNext() ) { + iterator.next().accOn(); + } } @Override public void destroy() { - if ( mReceiver != null ) { - try { - getApplicationContext().unregisterReceiver( mReceiver ); - } catch ( Exception e ) { - e.printStackTrace(); - } + if ( mMogoIntentManager != null ) { + mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_CONNECTED ); + mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED ); + mMogoIntentManager.unregisterIntentListener( MogoReceiver.ACTION_NWD_ACC ); } - mReceiver = null; mActivity = null; if ( mModuleProviders != null ) { mModuleProviders.clear(); @@ -633,8 +619,7 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public boolean onMarkerClicked( IMogoMarker marker ) { - IMogoMarkerClickListener listener = - MogoRegisterCenterHandler.getInstance().getMarkerListener( marker.getOwner() ); + IMogoMarkerClickListener listener = MogoRegisterCenterHandler.getInstance().getMarkerListener( marker.getOwner() ); if ( listener != null ) { try { return listener.onMarkerClicked( marker ); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index 4c3a8a2525..c04af82978 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -49,6 +49,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; +import java.util.Iterator; import java.util.List; /** @@ -125,8 +126,8 @@ public class MogoServiceProvider implements IMogoModuleProvider, mRefreshRemainingTime -= ServiceConst.DECREASE_INTERVAL; if ( mRefreshRemainingTime == 0 ) { Logger.d( TAG, "move to center and refresh data." ); - mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false ); - mUiController.moveToCenter(mLastAutoRefreshLocation); + mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); + mUiController.moveToCenter( mLastAutoRefreshLocation ); notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); } else { mHandler.sendEmptyMessageDelayed( msg.what, ServiceConst.DECREASE_INTERVAL ); @@ -495,8 +496,8 @@ public class MogoServiceProvider implements IMogoModuleProvider, } Logger.d( TAG, mAutoRefreshCallback == callback ? "触发自动刷新" : "触发手动刷新" ); int amount = mLastZoomLevel >= 10 ? 5 : 10; - mRefreshModel.refreshData( latLng, radius, mLastZoomLevel >= 10 ? 5 : 10, callback ); - Logger.i( TAG, "刷新半径 = %d, 点 = %s, amount = %d", radius, latLng, amount ); + mRefreshModel.refreshData( latLng, radius, amount, callback ); + Logger.i( TAG, "刷新半径 = %d, 点 = %s, zoomLevel = %f, amount = %d", radius, latLng, mLastZoomLevel, amount ); } @Override @@ -523,9 +524,9 @@ public class MogoServiceProvider implements IMogoModuleProvider, @Override public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { - Logger.d(TAG, "状态发生改变---descriptor---" + descriptor + "----isTrue---" + isTrue); + Logger.d( TAG, "状态发生改变---descriptor---" + descriptor + "----isTrue---" + isTrue ); switch ( descriptor ) { - case USER_INTERACTED: + case USER_INTERACTED: if ( isTrue && !mRefreshRemainingTimeStatus ) { mRefreshRemainingTimeStatus = true; mRefreshRemainingTime += mAutoRefreshStrategy.getInterruptInterval(); @@ -556,17 +557,17 @@ public class MogoServiceProvider implements IMogoModuleProvider, mAutoRefreshCallback.onSuccess(); } } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } break; } } - public void refreshStrategy(){ + public void refreshStrategy() { Logger.d( TAG, "move to center and refresh data." ); - mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false ); - mUiController.moveToCenter(mLastAutoRefreshLocation); + mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); + mUiController.moveToCenter( mLastAutoRefreshLocation ); notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); } diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java index fe60b59266..fcd2c06f25 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java @@ -4,6 +4,9 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; import android.text.Html; import android.text.TextUtils; import android.util.Log; @@ -72,14 +75,12 @@ import com.mogo.module.tanlu.model.event.MarkerInfo; import com.mogo.module.tanlu.model.event.PushTypeInfo; import com.mogo.module.tanlu.model.event.SharedialogEvent; import com.mogo.module.tanlu.util.Utils; -import com.mogo.module.tanlu.video.FullMediaActivity; import com.mogo.module.tanlu.video.SimpleCoverVideoPlayer; import com.mogo.module.tanlu.view.AutoZoomInImageView; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.datamanager.IMogoDataChangedListener; -import com.mogo.service.datamanager.IMogoDataManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.imageloader.IMogoImageLoaderListener; import com.mogo.service.imageloader.IMogoImageloader; @@ -168,7 +169,12 @@ public class TanluCardViewFragment extends MvpFragment> private String mKeywords; private boolean isCurrentPage; - + private Handler mMsgHandler = new Handler( Looper.getMainLooper() ){ + @Override + public void handleMessage( Message msg ) { + super.handleMessage( msg ); + } + }; @Override protected int getLayoutId() { return R.layout.tanlu_item_main_media_recycler; @@ -772,9 +778,8 @@ public class TanluCardViewFragment extends MvpFragment> mNextTv.setVisibility(View.VISIBLE); } - //展示第一个数据 - MarkerExploreWay markerExploreWay = markerExploreWayList.get(0); - handleMarkerExploreWay(markerExploreWay); + //延时展示第一个数据 + mMsgHandler.postDelayed( mDelayRunnable, 1_000L ); } else { mEmptyLayout.setVisibility(View.VISIBLE); mRootLayout.setVisibility(View.GONE); @@ -782,6 +787,31 @@ public class TanluCardViewFragment extends MvpFragment> } } + private MarkerExploreWay mLastPlayEntity = null; + + // 播放第一个数据需要延时,避免滑动卡顿 + private Runnable mDelayRunnable = new Runnable() { + @Override + public void run() { + if ( isCurrentPage && !isRemoving() && !isDetached() ) { + try { + final MarkerExploreWay markerExploreWay = markerExploreWayList.get(0); + if ( mLastPlayEntity == markerExploreWay ) { + if ( markerExploreWay.getFileType() == 1 ) { + // 视频的话重新播放 + simpleCoverVideoPlayer.getGSYVideoManager().start(); + } + } else { + mLastPlayEntity = markerExploreWay; + handleMarkerExploreWay(markerExploreWay); + } + } catch( Exception e ){ + e.printStackTrace(); + } + } + } + }; + @Override public void onDataSetChanged( Object data ) { Logger.d( TAG, "receive data changed." ); @@ -811,6 +841,28 @@ public class TanluCardViewFragment extends MvpFragment> public void onDisable() { Logger.d(TAG, "tanlu卡片 无效 ----->"); isCurrentPage = false; + mMsgHandler.removeCallbacks( mDelayRunnable ); + if ( mLastPlayEntity != null ) { + if ( mLastPlayEntity.getFileType() == 1 ) { + try { + if ( simpleCoverVideoPlayer.getVisibility() == View.VISIBLE ) { + // 卡片滑动过去之后停止播放 + simpleCoverVideoPlayer.getGSYVideoManager().pause(); + } + } catch ( Exception e ) { + e.printStackTrace(); + } + } else { + try { + if ( autoZoomInImageView.getVisibility() == View.VISIBLE ) { + autoZoomInImageView.stopCurrentAnimator(); + } + } catch ( Exception e ) { + e.printStackTrace(); + } + } + } + AIAssist.getInstance(getActivity()).unregisterUnWakeupCommand(TanluConstants.PLAY_VIDEO); } diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/view/AutoZoomInImageView.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/view/AutoZoomInImageView.java index 20737ab449..cd34a35832 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/view/AutoZoomInImageView.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/view/AutoZoomInImageView.java @@ -94,13 +94,15 @@ public class AutoZoomInImageView extends MogoImageView { setImageMatrix(mMatrix); } + private ValueAnimator mCurrentAnimator; + private void startZoomInByScaleDelta(final float scaleDelta, long duration) { final float oriScaleX = mValues[0]; final float oriScaleY = mValues[4]; - ValueAnimator va = ValueAnimator.ofFloat(0, scaleDelta); - va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + mCurrentAnimator = ValueAnimator.ofFloat(0, scaleDelta); + mCurrentAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { @@ -113,7 +115,7 @@ public class AutoZoomInImageView extends MogoImageView { setImageMatrix(mMatrix); } }); - va.addListener(new Animator.AnimatorListener() { + mCurrentAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { if (mOnZoomListener != null) mOnZoomListener.onStart(AutoZoomInImageView.this); @@ -122,18 +124,31 @@ public class AutoZoomInImageView extends MogoImageView { @Override public void onAnimationEnd(Animator animation) { if (mOnZoomListener != null) mOnZoomListener.onEnd(AutoZoomInImageView.this); + mCurrentAnimator = null; } @Override public void onAnimationCancel(Animator animation) { + mCurrentAnimator = null; } @Override public void onAnimationRepeat(Animator animation) { } }); - va.setDuration(duration); - va.start(); + mCurrentAnimator.setDuration(duration); + mCurrentAnimator.start(); + } + + /** + * 停止动画 + */ + public void stopCurrentAnimator(){ + if ( mCurrentAnimator != null ) { + if ( mCurrentAnimator.isRunning() ) { + mCurrentAnimator.cancel(); + } + } } /**