package cn.walcl.ulauncher.actions;
import java.lang.reflect.Method;
import java.util.List;
import cn.walcl.ulauncher.Launcher;
import cn.walcl.ulauncher.R;
import cn.walcl.ulauncher.settings.SettingsActivity;
import android.content.Intent;
import android.view.Menu;
public class DefaultAction implements LauncherActions.Action {
private static final String EXTRA_BINDINGVALUE = "DefaultLauncherAction.EXTRA_BINDINGVALUE";
public static final int ACTION_OPENCLOSE_DRAWER = 1;
public static final int ACTION_SHOW_ULNR_SETTINGS = 2;
public static final int ACTION_SHOW_NOTIFICATIONS = 3;
public static final int ACTION_MANAGE_APPS = 4;
public static final int ACTION_SYSTEM_SETTINGS = 5;
private final int mBindingValue;
private final String mName;
public static void GetActions(List<LauncherActions.Action> list) {
Launcher launcher = LauncherActions.getInstance().getLauncher();
if (launcher == null)
return;
list.add(getAction(launcher, ACTION_OPENCLOSE_DRAWER));
list.add(getAction(launcher, ACTION_SHOW_ULNR_SETTINGS));
list.add(getAction(launcher, ACTION_SHOW_NOTIFICATIONS));
list.add(getAction(launcher, ACTION_MANAGE_APPS));
list.add(getAction(launcher, ACTION_SYSTEM_SETTINGS));
}
public static DefaultAction getAction(Launcher launcher, int action) {
final String name;
switch(action) {
case ACTION_OPENCLOSE_DRAWER:
name = launcher.getString(R.string.action_opendrawer); break;
case ACTION_SHOW_ULNR_SETTINGS:
name = launcher.getString(R.string.action_ulnr_settings); break;
case ACTION_SHOW_NOTIFICATIONS:
name = launcher.getString(R.string.menu_notifications); break;
case ACTION_MANAGE_APPS:
name = launcher.getString(R.string.menu_manage_apps); break;
case ACTION_SYSTEM_SETTINGS:
name = launcher.getString(R.string.menu_settings); break;
default:
name = "";
}
if (!name.equals(""))
return new DefaultAction(action, name);
return null;
}
public DefaultAction(int bindingValue, String name) {
mBindingValue = bindingValue;
mName = name;
}
@Override
public String getName() {
return mName;
}
@Override
public void putIntentExtras(Intent intent) {
intent.putExtra(EXTRA_BINDINGVALUE, mBindingValue);
}
@Override
public boolean runIntent(Intent intent) {
if (intent.hasExtra(EXTRA_BINDINGVALUE))
{
int val = intent.getIntExtra(EXTRA_BINDINGVALUE, 0);
if (val == mBindingValue) {
fireHomeBinding(mBindingValue);
return true;
}
}
return false;
}
@Override
public int getIconResourceId() {
switch(mBindingValue) {
case ACTION_MANAGE_APPS:
return android.R.drawable.ic_menu_manage;
case ACTION_SHOW_NOTIFICATIONS:
return R.drawable.ic_menu_notifications;
case ACTION_SYSTEM_SETTINGS:
return android.R.drawable.ic_menu_preferences;
default:
return R.drawable.ic_launcher_home;
}
}
public void addToMenu(Menu menu, int group) {
menu.add(group, Menu.NONE, Menu.NONE, getName())
.setIntent(LauncherActions.getInstance().getIntentForAction(this))
.setIcon(getIconResourceId());
}
private static void OpenCloseDrawer(Launcher launcher) {
if (launcher.isAllAppsVisible())
launcher.closeAllApps(true);
else
launcher.showAllApps(true);
}
private static void ShowSettings(Launcher launcher) {
launcher.startActivity(new Intent(launcher, SettingsActivity.class));
}
private static void ShowNotifications(Launcher launcher) {
try {
Object service = launcher.getSystemService("statusbar");
if (service != null) {
Method expand = service.getClass().getMethod("expand");
expand.invoke(service);
}
} catch (Exception e) {
}
}
private static void ManageApps(Launcher launcher) {
launcher.startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));
}
private static void SystemSettings(Launcher launcher) {
final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
launcher.startActivity(settings);
}
public static void fireHomeBinding(int value) {
Launcher launcher = LauncherActions.getInstance().getLauncher();
if (launcher == null)
return;
switch(value) {
case ACTION_OPENCLOSE_DRAWER: OpenCloseDrawer(launcher); break;
case ACTION_SHOW_ULNR_SETTINGS: ShowSettings(launcher); break;
case ACTION_SHOW_NOTIFICATIONS: ShowNotifications(launcher); break;
case ACTION_MANAGE_APPS: ManageApps(launcher); break;
case ACTION_SYSTEM_SETTINGS: SystemSettings(launcher); break;
}
}
}