package com.android.launcher;
import java.util.ArrayList;
import java.util.List;
import com.android.launcher.catalogue.AppCatalogueFilter;
import com.android.launcher.catalogue.AppCatalogueFilters;
import android.content.Intent;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;
public class LauncherActions {
public interface Action {
public String getName();
public void putIntentExtras(Intent intent);
public boolean runIntent(Intent intent);
public int getIconResourceId();
}
private static LauncherActions mInstance = null;
private Launcher mLauncher;
public static synchronized LauncherActions getInstance() {
if (mInstance == null)
mInstance = new LauncherActions();
return mInstance;
}
private LauncherActions() {
}
public void init(Launcher launcher) {
mLauncher = launcher;
}
private List<Action> getList() {
List<Action> result = new ArrayList<Action>();
String[] menuBindingsNames = mLauncher.getResources().getStringArray(R.array.menu_binding_entries);
String[] menuBindingsValues = mLauncher.getResources().getStringArray(R.array.menu_binding_values);
for (int i = 0; i < menuBindingsValues.length; i++) {
int value = Integer.parseInt(menuBindingsValues[i]);
String name = menuBindingsNames[i];
if (value != Launcher.BIND_NONE && value != Launcher.BIND_APP_LAUNCHER &&
value != Launcher.BIND_HOME_PREVIEWS && value != Launcher.BIND_HOME_NOTIFICATIONS) {
DefaultLauncherAction lact = new DefaultLauncherAction(value, name);
result.add(lact);
}
}
AppCatalogueFilters filters = AppCatalogueFilters.getInstance();
List<AppCatalogueFilters.Catalogue> catalogues = filters.getAllGroups();
for(AppCatalogueFilters.Catalogue cat : catalogues) {
ShowGroupAction act = new ShowGroupAction(cat);
result.add(act);
}
return result;
}
public Intent getIntentForAction(Action action) {
Intent result = new Intent(CustomShirtcutActivity.ACTION_LAUNCHERACTION);
result.setClass(mLauncher, CustomShirtcutActivity.class);
action.putIntentExtras(result);
return result;
}
public void launch(Intent intent) {
final List<Action> actions = getList();
for(Action act : actions) {
if (act.runIntent(intent))
break;
}
}
public ListAdapter getSelectActionAdapter() {
final List<Action> mActions = getList();
return new ListAdapter() {
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
}
@Override
public boolean isEmpty() {
return mActions.isEmpty();
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
{
LayoutInflater li = mLauncher.getLayoutInflater();
convertView = li.inflate(R.layout.add_list_item, parent, false);
}
Action act = mActions.get(position);
TextView textView = (TextView) convertView;
textView.setText(act.getName());
textView.setCompoundDrawablesWithIntrinsicBounds(
mLauncher.getResources().getDrawable(act.getIconResourceId()), null, null, null);
return convertView;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return mActions.get(position);
}
@Override
public int getCount() {
return mActions.size();
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
};
}
private class DefaultLauncherAction implements Action {
private static final String EXTRA_BINDINGVALUE = "DefaultLauncherAction.EXTRA_BINDINGVALUE";
private final int mBindingValue;
private final String mName;
public DefaultLauncherAction(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) {
mLauncher.fireHomeBinding(mBindingValue, 0);
return true;
}
}
return false;
}
@Override
public int getIconResourceId() {
switch(mBindingValue) {
case Launcher.BIND_DEFAULT:
return R.drawable.movetodefault_button;
case Launcher.BIND_PREVIEWS:
return R.drawable.showpreviews_button;
case Launcher.BIND_APPS:
return R.drawable.all_apps_button;
case Launcher.BIND_STATUSBAR:
return R.drawable.showhidestatusbar_button;
case Launcher.BIND_NOTIFICATIONS:
return R.drawable.openclosenotifications_button;
case Launcher.BIND_DOCKBAR:
return R.drawable.openclosedockbar_button;
default:
return R.drawable.ic_launcher_home;
}
}
}
private class ShowGroupAction implements Action {
private final AppCatalogueFilters.Catalogue mCatalogue;
private static final String EXTRA_CATALOG_INDEX = "EXTRA_CATALOG_INDEX";
public ShowGroupAction(AppCatalogueFilters.Catalogue catalogue) {
mCatalogue = catalogue;
}
@Override
public String getName() {
return String.format(mLauncher.getString(R.string.show_catalog), mCatalogue.getTitle());
}
@Override
public void putIntentExtras(Intent intent) {
intent.putExtra(EXTRA_CATALOG_INDEX, mCatalogue.getIndex());
}
@Override
public boolean runIntent(Intent intent) {
if (intent.hasExtra(EXTRA_CATALOG_INDEX)) {
int idx = intent.getIntExtra(EXTRA_CATALOG_INDEX, 0);
if (idx == mCatalogue.getIndex()) {
showDrawer();
return true;
}
}
return false;
}
private void showDrawer() {
AppCatalogueFilter filter = new AppCatalogueFilter(mCatalogue.getIndex());
mLauncher.showAllApps(true, filter);
}
@Override
public int getIconResourceId() {
return R.drawable.ic_launcher_home;
}
}
}