修改默认launcher

1 清除已经设置默认launcher的情况

2 开机需要自动打开到特定launcher

3 home需要返回特定launcher

修改检测开机广播,清除默认程序设置和设置默认launcher

---
 .../android/tv/settings/FirstBootupRequest.java    | 46 ++++++++++++++++++++++

diff --git a/apps/TvSettings/Settings/src/com/android/tv/settings/FirstBootupRequest.java b/apps/TvSettings/Settings/src/com/android/tv/settings/FirstBootupRequest.java
index 26ce330..1c8c5a6 100755
--- a/apps/TvSettings/Settings/src/com/android/tv/settings/FirstBootupRequest.java
+++ b/apps/TvSettings/Settings/src/com/android/tv/settings/FirstBootupRequest.java
@@ -10,6 +10,12 @@ import android.provider.Settings;
 import android.provider.Settings.Global;
 import com.android.tv.settings.device.display.DisplayOutputImpl;
 
+import android.content.ComponentName;
+import android.content.pm.PackageManager;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import java.util.ArrayList;
+import java.util.List;
 import java.io.File;
 
 public final class FirstBootupRequest extends BroadcastReceiver {
@@ -27,6 +33,7 @@ public final class FirstBootupRequest extends BroadcastReceiver {
             Settings.Global.putInt(context.getContentResolver(),
                    Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
         }
+        setDefaultActivity(context);
     }
 
@@ -45,4 +52,43 @@ public final class FirstBootupRequest extends BroadcastReceiver {
         }
     }
 
+    private void setDefaultActivity(Context mContext) {
+        PackageManager pm = mContext.getPackageManager();
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_HOME);
+        List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);
+        if (resolveInfoList != null) {
+            int size = resolveInfoList.size();
+            for (int j = 0; j < size; j++) {
+                final ResolveInfo r = resolveInfoList.get(j);
+                Log.d("bootup", "resolveInfoList info:"+ r.toString());
+                if (r.activityInfo.packageName.equals(mContext.getPackageName())) {
+                    resolveInfoList.remove(j);
+                    size -= 1;
+                    break;
+                }
+            }
+
+
+            String packageName = SystemProperties.get("persist.sys.default.package");
+            String activityName = SystemProperties.get("persist.sys.default.activity");
+            Log.d("bootup", "bootup packageName=" +packageName);
+            Log.d("bootup", "bootup activityName=" +activityName);
+            ComponentName[] set = new ComponentName[size];
+            ComponentName defaultLauncher = new ComponentName(packageName,activityName);
+            int defaultMatch = 0;
+            for (int i = 0; i < size; i++) {
+                final ResolveInfo resolveInfo = resolveInfoList.get(i);
+                Log.d("bootup", "resolveInfo info:"+resolveInfo.toString());
+                set[i] = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
+                //does default launcher is exit
+                if (defaultLauncher.getClassName().equals(resolveInfo.activityInfo.name)) {
+                    defaultMatch = resolveInfo.match;
+                    //清除查询到的有home属性的apk的默认程序设置
+                    pm.clearPackagePreferredActivities(resolveInfo.activityInfo.packageName);
+                }
+            }
+            Log.d("bootup", "defaultMatch=" + Integer.toHexString(defaultMatch));
+            IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_MAIN);
+            filter.addCategory(Intent.CATEGORY_HOME);
+            filter.addCategory(Intent.CATEGORY_DEFAULT);
+            //添加launcher的默认程序设置
+            pm.addPreferredActivity(filter, defaultMatch, set, defaultLauncher);
+        }
+    }
+
 }
--
2.7.4

修改开机打开默认launcher

diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.java
index 81cfce6..984ec2f 100755
--- a/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -21035,12 +21035,13 @@ public class PackageManagerService extends IPackageManager.Stub
 
             if (resolveInfo.activityInfo != null && TextUtils.equals(
                     resolveInfo.activityInfo.packageName, packageName)) {
+                    Log.d("bootup","PackageManagerService getHomeActivitiesAsUser:"
+                      +resolveInfo.activityInfo.packageName);
                 //return new ComponentName(resolveInfo.activityInfo.packageName,
                 //        resolveInfo.activityInfo.name);
+                String cuspackageName = SystemProperties.get("persist.sys.default.package");
+                String activityName = SystemProperties.get("persist.sys.default.activity");
+                return new ComponentName(cuspackageName,activityName);
             }
         }
         return null;
@@ -21091,8 +21092,8 @@ public class PackageManagerService extends IPackageManager.Stub
             return false;
         }
         final String currentPackageName = provider.getDefaultHome(userId);
-        //Log.d("DefaultActivity", "PackageManagerService  packageName " + packageName);
-        //Log.d("DefaultActivity", "PackageManagerService  currentPackageName " + currentPackageName);
+        Log.d("bootup", "PackageManagerService  packageName " + packageName);
+        Log.d("bootup", "PackageManagerService  currentPackageName " + currentPackageName);
         if (TextUtils.equals(currentPackageName, packageName)) {
             return false;
         }
@@ -21102,7 +21103,9 @@ public class PackageManagerService extends IPackageManager.Stub
             // PermissionController manages default home directly.
             return false;
         }
-        provider.setDefaultHomeAsync("com.tvstorm.ott.trv", userId, (successful) -> {
+        //provider.setDefaultHomeAsync(packageName, userId, (successful) -> {
+        String cuspackageName = SystemProperties.get("persist.sys.default.package");
+        provider.setDefaultHomeAsync(cuspackageName, userId, (successful) -> {
             if (successful) {
                 postPreferredActivityChangedBroadcast(userId);
             }
diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 637dc3e..035e186 100755
--- a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
//这个位置根据自己情况看是否需要修改home键返回特定launcher

diff --git a/base/services/core/java/com/android/server/wm/ActivityStartController.java b/base/services/core/java/com/android/server/wm/ActivityStartController.java
index 919141c..c87fbf0 100644
--- a/base/services/core/java/com/android/server/wm/ActivityStartController.java
+++ b/base/services/core/java/com/android/server/wm/ActivityStartController.java
@@ -40,6 +40,7 @@ import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.UserHandle;
+import android.os.SystemProperties;
 import android.provider.Settings;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
@@ -169,6 +170,9 @@ public class ActivityStartController {
     }
 
     void startHomeActivity(Intent intent, ActivityInfo aInfo, String reason, int displayId) {
+        Slog.d("bootup","ActivityStartController---startHomeActivity");
+        Slog.d("bootup","ActivityStartController---startHomeActivity--aInfo.name:"+aInfo.name);
+        Slog.d("bootup","ActivityStartController---startHomeActivity--intent:"+intent);
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchWindowingMode(WINDOWING_MODE_FULLSCREEN);
         if (!ActivityRecord.isResolverActivity(aInfo.name)) {
@@ -177,6 +181,46 @@ public class ActivityStartController {
             // foreground instead of bring home stack to front.
             options.setLaunchActivityType(ACTIVITY_TYPE_HOME);
         }
+
+        //add
+        if("com.android.internal.app.ResolverActivity".equals(aInfo.name)){
+            String packageName = SystemProperties.get("persist.sys.default.package");
+            String activityName = SystemProperties.get("persist.sys.default.activity");
+            if(packageName == null || activityName == null){
+                packageName = "xxx";
+                activityName = "xxx.Activity";
+            }
+
+            Intent intentHome = new Intent(Intent.ACTION_MAIN);
+            intentHome.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            intentHome.addCategory(Intent.CATEGORY_HOME);
+            ComponentName com = new ComponentName(packageName,activityName);
+            intentHome.setComponent(com);
+
+            ActivityInfo aHomeInfo=null;
+            PackageManager pm = mService.mContext.getPackageManager();
+            List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);
+            if (resolveInfoList != null) {
+                int size = resolveInfoList.size();
+                for (int j = 0; j < size; j++) {
+                    final ResolveInfo r = resolveInfoList.get(j);
+                    Slog.d("bootup", "ActivityStartController---resolveInfoList info:" + r.activityInfo.name);
+                    if (r.activityInfo.packageName.equals(packageName)) {
+                        aHomeInfo = r.activityInfo;
+                    }
+                }
+            }
+            if(aHomeInfo != null){
+                Slog.d("bootup", "ActivityStartController---customer home:" + aHomeInfo.name);
+                aInfo = null;
+                aInfo = aHomeInfo;
+            }
+            intent = null;
+            intent = intentHome;
+        }
+        //end
+
         options.setLaunchDisplayId(displayId);
         mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason)
                 .setOutActivity(tmpOutRecord)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值