diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java index c4a2495369..244745cff1 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java @@ -108,6 +108,13 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme mLoadingView.setVisibility( View.GONE ); } + @Override + public void exit() { + if ( mExit != null ) { + mExit.performClick(); + } + } + @Override public Animation onCreateAnimation( int transit, boolean enter, int nextAnim ) { TranslateAnimation animation = null; 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 eada7ed782..8a640f2ab7 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 @@ -1,19 +1,19 @@ package com.mogo.module.apps; -import android.content.Intent; - import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; +import com.mogo.module.apps.applaunch.AppLaunchFilter; +import com.mogo.module.apps.applaunch.AppLauncher; +import com.mogo.module.apps.applaunch.CardAppLauncher; import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.model.AppsModel; -import com.mogo.module.apps.utils.LaunchUtils; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.utils.ThreadPoolService; -import com.mogo.utils.TipToast; import com.mogo.utils.UiThreadHandler; import java.util.HashMap; @@ -30,9 +30,16 @@ public class AppsPresenter extends Presenter< AppsView > { private static final String TAG = "AppsPresenter"; private IMogoAnalytics mAnalytics; + private AppLaunchFilter mLauncher; + + private IMogoCardManager mCardManager; public AppsPresenter( AppsView view ) { super( view ); + mCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( getContext() ); + CardAppLauncher cardAppLauncher = new CardAppLauncher( this, mCardManager ); + cardAppLauncher.setNext( new AppLauncher() ); + mLauncher = cardAppLauncher; } @Override @@ -68,9 +75,9 @@ public class AppsPresenter extends Presenter< AppsView > { trackAppClicked( appInfo ); try { - LaunchUtils.launchByPkg( getContext(), appInfo.getPackageName() ); + mLauncher.launch( getContext(), appInfo ); } catch ( Exception e ) { - TipToast.shortTip( R.string.module_apps_str_no_app ); + } } @@ -92,5 +99,12 @@ public class AppsPresenter extends Presenter< AppsView > { super.onDestroy( owner ); AppsListChangedLiveData.getInstance().release(); mView = null; + mLauncher.destroy(); + } + + public void exit() { + if ( mView != null ) { + mView.exit(); + } } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsView.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsView.java index 03ca995a0b..8539b2e7be 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsView.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsView.java @@ -20,4 +20,9 @@ public interface AppsView extends IView { * @param appInfos */ void renderApps( Map< Integer, List< AppInfo > > appInfos ); + + /** + * 退出列表页面 + */ + void exit(); } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLaunchFilter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLaunchFilter.java new file mode 100644 index 0000000000..a934c9895a --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLaunchFilter.java @@ -0,0 +1,18 @@ +package com.mogo.module.apps.applaunch; + +import android.content.Context; + +import com.mogo.module.apps.model.AppInfo; + +/** + * @author congtaowang + * @since 2020-02-09 + *
+ * 按指定方式启动指定的app + */ +public interface AppLaunchFilter { + + void launch( Context context, AppInfo appInfo ); + + void destroy(); +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java new file mode 100644 index 0000000000..0ce9ae3b23 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java @@ -0,0 +1,38 @@ +package com.mogo.module.apps.applaunch; + +import android.content.Context; + +import com.mogo.module.apps.R; +import com.mogo.module.apps.model.AppInfo; +import com.mogo.module.apps.utils.LaunchUtils; +import com.mogo.utils.TipToast; +import com.mogo.utils.logger.Logger; + +/** + * @author congtaowang + * @since 2020-02-09 + *
+ * 描述 + */ +public class AppLauncher extends BaseAppLauncher { + + private static final String TAG = "AppLauncher"; + + @Override + public void launch( Context context, AppInfo appInfo ) { + try { + LaunchUtils.launchByPkg( context, appInfo.getPackageName() ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + TipToast.shortTip( R.string.module_apps_str_no_app ); + } + } + + @Override + public void destroy() { + if ( getNext() != null ) { + getNext().destroy(); + setNext( null ); + } + } +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/BaseAppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/BaseAppLauncher.java new file mode 100644 index 0000000000..7b6cadd640 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/BaseAppLauncher.java @@ -0,0 +1,20 @@ +package com.mogo.module.apps.applaunch; + +/** + * @author congtaowang + * @since 2020-02-09 + *
+ * 描述 + */ +public abstract class BaseAppLauncher implements AppLaunchFilter { + + private AppLaunchFilter mNext; + + public AppLaunchFilter getNext() { + return mNext; + } + + public void setNext( AppLaunchFilter next ) { + this.mNext = next; + } +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java new file mode 100644 index 0000000000..fb0906f4c4 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java @@ -0,0 +1,57 @@ +package com.mogo.module.apps.applaunch; + +import android.content.Context; + +import com.mogo.module.apps.AppsPresenter; +import com.mogo.module.apps.model.AppInfo; +import com.mogo.service.cardmanager.IMogoCardManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author congtaowang + * @since 2020-02-09 + *
+ * 描述 + */ +public class CardAppLauncher extends BaseAppLauncher { + + private static Map< String, String > sCardApps = new HashMap<>(); + + static { + sCardApps.put( "com.zhidao.roadcondition.split", "CARD_TYPE_ROAD_CONDITION" ); + sCardApps.put( "com.zhidao.roadcondition", "CARD_TYPE_ROAD_CONDITION" ); + sCardApps.put( "com.zhidao.imdemo", "CARD_TYPE_CARS_CHATTING" ); + } + + private AppsPresenter mAppsPresenter; + private IMogoCardManager mCardManager; + + public CardAppLauncher( AppsPresenter mAppsPresenter, IMogoCardManager mCardManager ) { + this.mAppsPresenter = mAppsPresenter; + this.mCardManager = mCardManager; + } + + @Override + public void launch( Context context, AppInfo appInfo ) { + if ( sCardApps.containsKey( appInfo.getPackageName() ) ) { + mCardManager.switch2( sCardApps.get( appInfo.getPackageName() ) ); + mAppsPresenter.exit(); + } else { + if ( getNext() != null ) { + getNext().launch( context, appInfo ); + } + } + } + + @Override + public void destroy() { + mAppsPresenter = null; + mCardManager = null; + if ( getNext() != null ) { + getNext().destroy(); + setNext( null ); + } + } +} 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 new file mode 100644 index 0000000000..50a5fa55f6 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/CardAppInfo.java @@ -0,0 +1,17 @@ +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; + } +}