From 35d8b05825c9f6b28249fa59c83c5a8b31e3ec25 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Mon, 2 Nov 2020 19:49:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?app=E5=88=97=E8=A1=A8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/apps/AppFilterImpl.java | 11 ++ .../module/apps/applaunch/AppLauncher.java | 16 ++- .../com/mogo/module/apps/model/AppInfo.java | 14 ++- .../com/mogo/module/apps/model/AppsModel.java | 118 ++++++++++++++---- 4 files changed, 133 insertions(+), 26 deletions(-) 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 ) { From d50df55bef0f146a90fd44f6ced06aa40a7c7257 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Mon, 2 Nov 2020 19:50:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=9Amodule-tanlu-api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 - app/build.gradle | 4 +- .../com/mogo/launcher/MogoApplication.java | 3 +- config.gradle | 1 - libraries/mogo-tanlu-api/.gitignore | 1 - libraries/mogo-tanlu-api/build.gradle | 52 ------------------- libraries/mogo-tanlu-api/consumer-rules.pro | 0 libraries/mogo-tanlu-api/gradle.properties | 3 -- libraries/mogo-tanlu-api/proguard-rules.pro | 21 -------- .../tanlu/api/ExampleInstrumentedTest.java | 26 ---------- .../src/main/AndroidManifest.xml | 5 -- .../zhidao/mogo/tanlu/api/TanluApiConst.java | 10 ---- .../mogo/tanlu/api/ExampleUnitTest.java | 17 ------ libraries/tanlulib/build.gradle | 22 +++++--- .../roadcondition}/MogoTanluApiProvider.java | 15 +++--- .../zhidao/roadcondition/constant/Const.kt | 3 ++ settings.gradle | 1 - 17 files changed, 29 insertions(+), 156 deletions(-) delete mode 100644 libraries/mogo-tanlu-api/.gitignore delete mode 100644 libraries/mogo-tanlu-api/build.gradle delete mode 100644 libraries/mogo-tanlu-api/consumer-rules.pro delete mode 100644 libraries/mogo-tanlu-api/gradle.properties delete mode 100644 libraries/mogo-tanlu-api/proguard-rules.pro delete mode 100644 libraries/mogo-tanlu-api/src/androidTest/java/com/zhidao/mogo/tanlu/api/ExampleInstrumentedTest.java delete mode 100644 libraries/mogo-tanlu-api/src/main/AndroidManifest.xml delete mode 100644 libraries/mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api/TanluApiConst.java delete mode 100644 libraries/mogo-tanlu-api/src/test/java/com/zhidao/mogo/tanlu/api/ExampleUnitTest.java rename libraries/{mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api => tanlulib/src/main/java/com/zhidao/roadcondition}/MogoTanluApiProvider.java (76%) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8853517620..2343eab90b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -21,7 +21,6 @@