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 7029ae106b..c000684d06 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 @@ -42,6 +42,17 @@ public class AppFilterImpl { } } + public static boolean isSelfApp( PackageInfo packageInfo ) { + try { + if ( packageInfo.packageName.startsWith( "com.mogo.launcher" ) ) { + return true; + } + } catch ( Exception e ) { + + } + return false; + } + public static boolean sFilter( PackageInfo packageInfo ) { if ( isInExternalFilter( packageInfo ) ) { return true; 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 index f148156e82..077cc96031 100644 --- 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 @@ -1,6 +1,9 @@ package com.mogo.module.apps.applaunch; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.R; @@ -21,7 +24,18 @@ public class AppLauncher extends BaseAppLauncher { @Override public void launch( Context context, AppInfo appInfo ) { - launch( context, appInfo.getPackageName() ); + if ( !TextUtils.isEmpty( appInfo.getActivityClsName() ) ) { + Intent intent = new Intent(); + intent.setComponent( new ComponentName( appInfo.getPackageName(), appInfo.getActivityClsName() ) ); + try { + intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); + context.startActivity( intent ); + } catch ( Exception e ) { + launch( context, appInfo.getPackageName() ); + } + } else { + launch( context, appInfo.getPackageName() ); + } } @Override 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 62b2c34105..8eca3575a3 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,15 +15,17 @@ public class AppInfo { private final String mName; private final String mPackageName; + private final String mActivityClsName; private final String mVersionName; private final int mVersionCode; private final Drawable mIcon; private final int mIconResId; private final int mTrackType; // 埋点类型 - public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId, int mTrackType ) { + public AppInfo( String mName, String mPackageName, String mActivityClsName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId, int mTrackType ) { this.mName = mName; this.mPackageName = mPackageName; + this.mActivityClsName = mActivityClsName; this.mVersionName = mVersionName; this.mVersionCode = mVersionCode; this.mIcon = mIcon; @@ -31,8 +33,12 @@ public class AppInfo { this.mTrackType = mTrackType; } + public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId, int mTrackType ) { + this( mName, mPackageName,"", mVersionName, mVersionCode, mIcon, mIconResId, mTrackType ); + } + public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId ) { - this( mName, mPackageName, mVersionName, mVersionCode, mIcon, mIconResId, 0 ); + this( mName, mPackageName,"", mVersionName, mVersionCode, mIcon, mIconResId, 0 ); } public int getIconResId() { @@ -43,6 +49,10 @@ public class AppInfo { return mName; } + public String getActivityClsName() { + return mActivityClsName; + } + public String getPackageName() { return mPackageName; } 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 c7b1df564e..491ea9b82f 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 @@ -1,17 +1,21 @@ package com.mogo.module.apps.model; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.text.TextUtils; +import com.mogo.commons.debug.DebugConfig; import com.mogo.module.apps.AppFilterImpl; import com.mogo.module.apps.AppsConst; import com.mogo.module.apps.AppsListChangedLiveData; import com.mogo.utils.logger.Logger; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,7 +73,6 @@ public class AppsModel { AppFilterImpl.loadExternalFilterPackagesList(); } catch ( Exception e ) { Logger.e( TAG, e, "error." ); - e.printStackTrace(); } final PackageManager packageManager = mContext.getPackageManager(); List< PackageInfo > packages = packageManager.getInstalledPackages( 0 ); @@ -77,23 +80,24 @@ public class AppsModel { for ( int i = 0; i < packages.size(); ++i ) { PackageInfo packageInfo = packages.get( i ); if ( AppFilterImpl.sFilter( packageInfo ) ) { + if ( DebugConfig.isDebug() ) { + if ( AppFilterImpl.isSelfApp( packageInfo ) ) { + counter = addSelfLauncher( mContext, packageManager, packageInfo, counter ); + } + } continue; } - int page = counter++ / AppsConst.TOTAL_SIZE_EACH_PAGE; - if ( mPagedApps.get( page ) == null ) { - mPagedApps.put( page, new ArrayList<>() ); + List< ResolveInfo > resolveInfoList = getApkLaunchResolveInfoForInstalled( mContext, packageInfo.packageName ); + if ( resolveInfoList == null || resolveInfoList.isEmpty() ) { + continue; } - String appName = getApplicationName( packageManager, packageInfo ); - String packageName = packageInfo.packageName; - String versionName = packageInfo.versionName; - int versionCode = packageInfo.versionCode; - int iconResId = AppEnumHelper.getCustomizedAppIconResId( packageName ); - Drawable appIcon = null; - if ( iconResId == 0 ) { - appIcon = packageInfo.applicationInfo.loadIcon( packageManager ); + for ( ResolveInfo resolveInfo : resolveInfoList ) { + if ( resolveInfo == null ) { + continue; + } + int page = counter++ / AppsConst.TOTAL_SIZE_EACH_PAGE; + addApp( packageManager, packageInfo, resolveInfo, page ); } - AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, iconResId ); - mPagedApps.get( page ).add( appInfo ); } if ( callback != null ) { callback.onLoaded( mPagedApps ); @@ -101,6 +105,82 @@ public class AppsModel { mIsLoaded.set( true ); } + private int addSelfLauncher( Context context, + PackageManager packageManager, + PackageInfo packageInfo, + int counter ) { + List< ResolveInfo > resolveInfoList = getApkLaunchResolveInfoForInstalled( context, packageInfo.packageName ); + if ( resolveInfoList == null || resolveInfoList.isEmpty() ) { + return counter; + } + for ( ResolveInfo resolveInfo : resolveInfoList ) { + if ( resolveInfo == null ) { + continue; + } + if ( TextUtils.equals( resolveInfo.activityInfo.name, + "com.zhidao.mogo.module.main.launcher.MainLauncherActivity" ) ) { + continue; + } + int page = counter++ / AppsConst.TOTAL_SIZE_EACH_PAGE; + addApp( packageManager, packageInfo, resolveInfo, page ); + } + return counter; + } + + /** + * 获取所有可以启动的ResolveInfo,其中包含所有activity及其Icon + * + * @param context context of the operation + * @return all app lists + */ + public static List< ResolveInfo > getApkLaunchResolveInfoForInstalled( Context context, + String packageName ) { + List< ResolveInfo > apps = null; + if ( null != context ) { + PackageManager manager = context.getPackageManager(); + Intent mainIntent = new Intent( Intent.ACTION_MAIN, null ); + mainIntent.addCategory( Intent.CATEGORY_LAUNCHER ); + if ( null != packageName && !packageName.isEmpty() ) { + mainIntent.setPackage( packageName ); + } + apps = manager.queryIntentActivities( mainIntent, 0 ); + } + return null == apps ? new ArrayList<>() : apps; + } + + private void addApp( PackageManager packageManager, + PackageInfo packageInfo, + ResolveInfo resolveInfo, + int page ) { + if ( mPagedApps.get( page ) == null ) { + mPagedApps.put( page, new ArrayList<>() ); + } + mPagedApps.get( page ).add( wrapAppInfo( packageManager, packageInfo, resolveInfo ) ); + } + + private AppInfo wrapAppInfo( PackageManager packageManager, + PackageInfo packageInfo, + ResolveInfo resolveInfo ) { + String appName = getApplicationName( packageManager, packageInfo ); + String packageName = packageInfo.packageName; + String versionName = packageInfo.versionName; + int versionCode = packageInfo.versionCode; + int iconResId = AppEnumHelper.getCustomizedAppIconResId( packageName ); + Drawable appIcon = null; + if ( iconResId == 0 ) { + if ( resolveInfo != null + && resolveInfo.activityInfo != null + && !TextUtils.equals( packageName, resolveInfo.activityInfo.processName ) ) { + appIcon = resolveInfo.activityInfo.loadIcon( packageManager ); + appName = resolveInfo.activityInfo.loadLabel( packageManager ).toString(); + } + if ( appIcon == null ) { + appIcon = packageInfo.applicationInfo.loadIcon( packageManager ); + } + } + return new AppInfo( appName, packageName, resolveInfo != null ? resolveInfo.activityInfo.name : null, versionName, versionCode, appIcon, iconResId, 0 ); + } + public void appAdded( String packageName ) { if ( !mIsLoaded.get() ) { return; @@ -115,16 +195,8 @@ public class AppsModel { final PackageManager packageManager = mContext.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo( packageName, 0 ); if ( !AppFilterImpl.sFilter( packageInfo ) ) { - String appName = getApplicationName( packageManager, packageInfo ); - String versionName = packageInfo.versionName; - int versionCode = packageInfo.versionCode; - Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager ); - AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, AppEnumHelper.getCustomizedAppIconResId( packageName ) ); int pageIndex = getPageIndex( packageName, true ); - if ( mPagedApps.get( pageIndex ) == null ) { - mPagedApps.put( pageIndex, new ArrayList<>() ); - } - mPagedApps.get( pageIndex ).add( appInfo ); + addApp( packageManager, packageInfo, null, pageIndex ); } AppsListChangedLiveData.getInstance().postValue( true ); } catch ( PackageManager.NameNotFoundException e ) { diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluListWindow.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluListWindow.java index dbc96cf077..244dafdc50 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluListWindow.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluListWindow.java @@ -602,7 +602,9 @@ public class TanluListWindow extends RelativeLayout implements IMogoMarkerClickL @Override public void onQueryRoadInfoFail(@NotNull String msg, int code) { Logger.e(TAG, "onQueryRoadInfoFail ----- msg = " + msg); - speakFailVoice(searchfaileVoiceStrings[2]); +// speakFailVoice(searchfaileVoiceStrings[2]); + speakFailVoice("未发现" + mKeywords + "附近的特殊路况"); + moveToMarcker(currentLat, currentLon); } @Override @@ -1158,14 +1160,17 @@ public class TanluListWindow extends RelativeLayout implements IMogoMarkerClickL .longitude(lon); IMogoMarker mogoAnimationMarker = mMarkerManager.addMarker(TanluConstants.MODEL_NAME, options); - mogoAnimationMarker.startScaleAnimation(0, 4f, 0, 4f, 500, new LinearInterpolator(), new OnMarkerAnimationListener() { + mogoAnimationMarker.startScaleAnimation(0, 1f, 0, 1f, 500, new LinearInterpolator(), new OnMarkerAnimationListener() { @Override public void onAnimStart() { } @Override public void onAnimEnd() { - mogoAnimationMarker.destroy(); + UiThreadHandler.postDelayed( () -> { + mogoAnimationMarker.destroy(); + }, 1_200L ); + } }); diff --git a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_circle_image.png b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_circle_image.png index 4b3c40856e..32847b095d 100644 Binary files a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_circle_image.png and b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_circle_image.png differ diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java index 4e1ccf0329..205b9d43d5 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java @@ -178,7 +178,7 @@ public class V2XLiveGSYVideoView extends RoundLayout implements IMogoSkinCompatS private void playLiveVideo(MarkerCarInfo.CarLiveInfo carLiveInfo) { try { if (mLivePlayer != null) { - mLivePlayer.startPlay("rtmp://58.200.131.2:1935/livetv/hunantv", TXLivePlayer.PLAY_TYPE_LIVE_RTMP); + mLivePlayer.startPlay(carLiveInfo.getVideoUrl(), TXLivePlayer.PLAY_TYPE_LIVE_RTMP); mLivePlayer.setPlayListener(new ITXLivePlayListener() { @Override public void onPlayEvent(int event, Bundle bundle) {