Skip to content

Instantly share code, notes, and snippets.

@amsterdatech
Created September 4, 2015 17:23
Show Gist options
  • Save amsterdatech/1dce6855a76eeda4b961 to your computer and use it in GitHub Desktop.
Save amsterdatech/1dce6855a76eeda4b961 to your computer and use it in GitHub Desktop.
Enable Disable Component Alias
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