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)