Created
September 4, 2015 17:23
-
-
Save amsterdatech/1dce6855a76eeda4b961 to your computer and use it in GitHub Desktop.
Enable Disable Component Alias
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.amsterdatech.shortcutpoc; | |
import android.content.ComponentName; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.pm.PackageManager; | |
import android.util.Log; | |
import java.lang.ref.WeakReference; | |
import java.net.URISyntaxException; | |
/** | |
* Created by amsterdatech on 9/1/15. | |
*/ | |
public class ComponentAliasManager { | |
private WeakReference<Context> contextWrapper; | |
private PackageManager packageManager; | |
public final static String DEFAULT_ALIAS = ".DefaultActivity"; | |
protected ComponentAliasManager(Context context) { | |
this.contextWrapper = new WeakReference<Context>(context); | |
packageManager = this.contextWrapper.get().getPackageManager(); | |
} | |
protected ComponentAliasManager(Context context, PackageManager packageManager) { | |
this.contextWrapper = new WeakReference<Context>(context); | |
this.packageManager = packageManager; | |
} | |
public ComponentAliasManager inject(PackageManager packageManager) { | |
this.packageManager = packageManager; | |
return this; | |
} | |
public boolean isDefaultAliasEnabledFor(String packageName) { | |
int flag = packageManager.getComponentEnabledSetting(getComponentName(packageName, DEFAULT_ALIAS)); | |
return flag == PackageManager.COMPONENT_ENABLED_STATE_ENABLED ? true : false; | |
} | |
public void changeIconForTelcoOperator(String packageName){ | |
String appstoreAlias = contextWrapper.get().getString(R.string.alias_inner_icon_name); | |
if(isDefaultAliasEnabledFor(packageName)){ | |
enableComponent(appstoreAlias,packageName); | |
disableComponent(DEFAULT_ALIAS,packageName); | |
} | |
} | |
public void changeIconForTelcoOperator(String packageName,String alias){ | |
for(String activityAlias:ShorcutChanger.ALIASES){ | |
if(!activityAlias.equalsIgnoreCase(alias)){ | |
disableComponent(activityAlias,packageName); | |
uninstallShortcut(alias); | |
}else{ | |
enableComponent(alias,packageName); | |
installShortcut(packageName,alias); | |
} | |
} | |
} | |
public ComponentAliasManager enableComponent(String alias, String packageName) { | |
packageManager.setComponentEnabledSetting( | |
getComponentName(packageName, alias), | |
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, | |
PackageManager.DONT_KILL_APP); | |
return this; | |
} | |
public ComponentAliasManager disableComponent(String alias, String packageName) { | |
packageManager.setComponentEnabledSetting( | |
getComponentName(packageName, alias), | |
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, | |
PackageManager.DONT_KILL_APP); | |
return this; | |
} | |
public ComponentName getComponentName(String packageName, String alias) { | |
return new ComponentName(packageName, | |
packageName + alias); | |
} | |
public void installShortcut(String packageName,String alias) { | |
Intent shortcutIntent = new Intent(contextWrapper.get(),MainActivity.class); | |
shortcutIntent.setAction(Intent.ACTION_MAIN); | |
Intent addIntent = new Intent(); | |
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); | |
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut for " + alias); | |
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, | |
Intent.ShortcutIconResource.fromContext(contextWrapper.get(), | |
getEmbeddedIconFor(alias))); | |
addIntent.putExtra("duplicate", false); | |
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); | |
contextWrapper.get().sendBroadcast(addIntent); | |
} | |
private int getEmbeddedIconFor(String alias) { | |
if (alias.equalsIgnoreCase(MainActivity.CLARO_ALIAS)) { | |
return R.drawable.appstore_ic_launcher_claro; | |
} | |
if (alias.equalsIgnoreCase(MainActivity.OI_ALIAS)) { | |
return R.drawable.appstore_ic_launcher_oi; | |
} | |
if (alias.equalsIgnoreCase(MainActivity.MOVISTAR_ALIAS)) { | |
return R.drawable.appstore_ic_launcher_movistar; | |
} | |
return R.drawable.ic_launcher; | |
} | |
public void uninstallShortcut(String alias) { | |
Intent intent = new Intent(); | |
String oldShortcutUriTemplate = "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;package=com.amsterdatech.shortcutpoc;component=com.amsterdatech.shortcutpoc/%s;end"; | |
String oldShortcutUri = String.format(oldShortcutUriTemplate,alias); | |
try { | |
Intent altShortcutIntent = Intent.parseUri(oldShortcutUri, 0); | |
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, altShortcutIntent); | |
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut for " + alias); | |
} catch (URISyntaxException e) { | |
} | |
intent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT"); | |
contextWrapper.get().sendBroadcast(intent); | |
} | |
private Class getClassFor(String packageName,String alias) { | |
Class clz = null; | |
try { | |
clz = Class.forName(packageName + alias); | |
} catch (ClassNotFoundException e) { | |
e.printStackTrace(); | |
} | |
if (clz != null) { | |
Log.d(ShorcutChanger.class.getSimpleName(), "[FEATURE " + | |
ShorcutChanger.class.getSimpleName() + | |
" - CLASS:" + clz.getCanonicalName() + " ]"); | |
} | |
return clz; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment