How to get 'correct' default launcher programmatically? Shortcuts lose their title

654 views Asked by At

What have I done so far:

I am currenctly facing some problems with the launchers. My application adds shortcuts to the workspace of the launcher (homescreen). But on some devices (Samsum Duos) for example, the titles and /or icons are changed back after reboot to my default application one.

So I am currently going through 1000s of lines code in the android source to identify the problem, but was not able to find it.

I saw in InstallShortcutReceiver a comment in line 183 that the "name" provided by Intent.EXTRA_SHORTCUT_NAME can in some situations be used only for comparison etc and will be replaced with the applications default name.

    // This name is only used for comparisons and notifications, so fall back to activity name
    // if not supplied

But (my Samsum Duos is rooted) I could find the complete information's about the cell position and shortcutInfo's inside of the launcher.db.

So it was not gone, after reboot, but maybe only not correct initialized!

  1. First Question:

Does anybody know the reason for a custom, programmatically created shortcut to change the title and or icon back to the application's one that created it?

Next story:

I noticed that this issue was reproducible on my Samsum Duos, so I decided to exclude the Devices Launcher from my "save launcher" list.

To receive the default launcher I am doing the following:

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    ResolveInfo resolveInfo = null;
    try {
        resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); //can return null!
    }catch(RuntimeException e){
        ExceptionHandler.logAndSendException(e);//package manager has died
        return false;
    }

But the problem now is, that it always returns that the default launchers package is: com.android.launcher2.Launcher, which would be the standard android stock launcher. But I know that Samsum uses the TouchWiz home launcher, whos Package is located under com.sec.android.app.launcher! That is also where I found the launcher.db and all its ShortcutInfo's.

2. Second Question

How do I get reproducible the correct default launcher package to identify which launcher is used?

edit:

I kind of fixed the second problem. Somehow the ResolveInfo I get from the PackageManager seems to be not reliable.

For the Samsum Duos I get:

resolveInfo.activityInfo.name = com.android.launcher2.Launcher
resolveInfo.activityInfo.packageName = com.sec.android.app.launcher //this is what I need

But for the Redmi MIUI:

  resolveInfo.activityInfo.name = com.miui.home.launcher.Launcher //this time I would need this
  resolveInfo.activityInfo.packageName = com.miui.home //the packageName is not complete!

I need an unique identifier for the launcher! So I thought activityInfo.name would be the way to go, but it isn't in some situations. And the packageManager seems to apply to too many devices. Any suggestions?

Cheers!

0

There are 0 answers