diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..073d492
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/gen
+/bin
+/libs
diff --git a/res/layout/all_activities_child_item.xml b/res/layout/all_activities_child_item.xml
new file mode 100644
index 0000000..fb33ecc
--- /dev/null
+++ b/res/layout/all_activities_child_item.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/all_activities_group_item.xml b/res/layout/all_activities_group_item.xml
new file mode 100644
index 0000000..1da80fd
--- /dev/null
+++ b/res/layout/all_activities_group_item.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/frament_all_list.xml b/res/layout/frament_all_list.xml
index ddc015c..bcb80cf 100644
--- a/res/layout/frament_all_list.xml
+++ b/res/layout/frament_all_list.xml
@@ -1,12 +1,12 @@
-
+ android:layout_height="fill_parent"
+ android:orientation="vertical">
+ android:layout_height="match_parent">
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 37169e6..9c0c9b9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5,4 +5,9 @@
All activities
Launch activity
Create shortcut
+ Starting activity: %s
+ Starting application: %s
+ Creating activity shortcut for %s
+ Creating application shortcut for %s
+ Error
diff --git a/src/de/szalkowski/activitylauncher/AllTasksListAdapter.java b/src/de/szalkowski/activitylauncher/AllTasksListAdapter.java
index e028513..bef6cd2 100644
--- a/src/de/szalkowski/activitylauncher/AllTasksListAdapter.java
+++ b/src/de/szalkowski/activitylauncher/AllTasksListAdapter.java
@@ -8,20 +8,17 @@ import java.util.Map;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.util.Log;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
+import android.widget.ImageView;
import android.widget.TextView;
public class AllTasksListAdapter extends BaseExpandableListAdapter {
- final static private String LOG = "de.szalkowski.activitylauncher.alltaskslistadapter";
protected List packages = null;
protected List activities = null;
protected Map,Integer> index = null;
@@ -41,14 +38,15 @@ public class AllTasksListAdapter extends BaseExpandableListAdapter {
int pack_pos = this.packages.size();
for(ActivityInfo activity : pack.activities) {
- if(activity.isEnabled()) {
+ if(activity.isEnabled() && activity.exported) {
ComponentName acomp = new ComponentName(activity.packageName, activity.name);
MyActivityInfo myactivity = new MyActivityInfo(acomp, pm);
myactivity.package_id = pack_pos;
int act_pos = this.activities.size();
this.activities.add(myactivity);
- this.index.put(new Pair(pack_pos, n_activities), act_pos);
+ this.index.put(new Pair(pack_pos, n_activities), act_pos);
+ n_activities++;
}
}
if(n_activities > 0) {
@@ -73,12 +71,13 @@ public class AllTasksListAdapter extends BaseExpandableListAdapter {
public View getChildView (int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
MyActivityInfo activity = activities.get(index.get(new Pair(groupPosition,childPosition)));
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(android.R.layout.simple_expandable_list_item_2, null);
+ View view = inflater.inflate(R.layout.all_activities_child_item, null);
TextView text = (TextView) view.findViewById(android.R.id.text1);
- text.setText(activity.name);
-
- Log.d(LOG, "createChild " + activity.name);
+ text.setText(activity.name + " (" + activity.component_name.getClassName() + ")");
+
+ ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
+ icon.setImageDrawable(activity.icon);
return view;
}
@@ -107,11 +106,13 @@ public class AllTasksListAdapter extends BaseExpandableListAdapter {
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
MyPackageInfo pack = this.packages.get(groupPosition);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(android.R.layout.simple_expandable_list_item_1, null);
+ View view = inflater.inflate(R.layout.all_activities_group_item, null);
TextView text = (TextView) view.findViewById(android.R.id.text1);
text.setText(pack.name);
- Log.d(LOG, "createGroup " + pack.name);
+
+ ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
+ icon.setImageDrawable(pack.icon);
return view;
}
diff --git a/src/de/szalkowski/activitylauncher/AllTasksListFragment.java b/src/de/szalkowski/activitylauncher/AllTasksListFragment.java
index 0d7a1c6..8b68bf2 100644
--- a/src/de/szalkowski/activitylauncher/AllTasksListFragment.java
+++ b/src/de/szalkowski/activitylauncher/AllTasksListFragment.java
@@ -1,22 +1,94 @@
package de.szalkowski.activitylauncher;
+import org.thirdparty.LauncherIconCreator;
+
+import android.content.Intent;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.view.ContextMenu;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
+import android.widget.ExpandableListView.OnChildClickListener;
+import android.widget.Toast;
public class AllTasksListFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.frament_all_list, container);
-
+ View view = inflater.inflate(R.layout.frament_all_list, null);
+
ExpandableListView list = (ExpandableListView) view.findViewById(R.id.expandableListView1);
list.setAdapter(new AllTasksListAdapter(this.getActivity()));
+ list.setOnChildClickListener(new OnChildClickListener() {
+ @Override
+ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
+ ExpandableListAdapter adapter = parent.getExpandableListAdapter();
+ MyActivityInfo info = (MyActivityInfo)adapter.getChild(groupPosition, childPosition);
+ LauncherIconCreator.launchActivity(getActivity(), info.component_name);
+ return false;
+ }
+ });
+
return view;
}
-}
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ ExpandableListView list = (ExpandableListView) getView().findViewById(R.id.expandableListView1);
+ this.registerForContextMenu(list);
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ menu.add(Menu.NONE, 0, Menu.NONE, R.string.context_action_shortcut);
+ menu.add(Menu.NONE, 1, Menu.NONE, R.string.context_action_launch);
+ super.onCreateContextMenu(menu, v, menuInfo);
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo)item.getMenuInfo();
+ ExpandableListView list = (ExpandableListView) getView().findViewById(R.id.expandableListView1);
+
+ switch(ExpandableListView.getPackedPositionType(info.packedPosition)) {
+ case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
+ MyActivityInfo activity = (MyActivityInfo) list.getExpandableListAdapter().getChild(ExpandableListView.getPackedPositionGroup(info.packedPosition), ExpandableListView.getPackedPositionChild(info.packedPosition));
+ switch(item.getItemId()) {
+ case 0:
+ LauncherIconCreator.createLauncherIcon(getActivity(), activity);
+ break;
+ case 1:
+ LauncherIconCreator.launchActivity(getActivity(), activity.component_name);
+ break;
+ }
+ break;
+
+ case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
+ MyPackageInfo pack = (MyPackageInfo) list.getExpandableListAdapter().getGroup(ExpandableListView.getPackedPositionGroup(info.packedPosition));
+ switch(item.getItemId()) {
+ case 0:
+ LauncherIconCreator.createLauncherIcon(getActivity(), pack);
+ break;
+ case 1:
+ PackageManager pm = getActivity().getPackageManager();
+ Intent intent = pm.getLaunchIntentForPackage(pack.package_name);
+ Toast.makeText(getActivity(), String.format(getText(R.string.starting_application).toString(), pack.name), Toast.LENGTH_LONG).show();
+ getActivity().startActivity(intent);
+ break;
+ }
+ }
+ return super.onContextItemSelected(item);
+ }
+}
\ No newline at end of file
diff --git a/src/de/szalkowski/activitylauncher/MainActivity.java b/src/de/szalkowski/activitylauncher/MainActivity.java
index 7ae398e..203d4b5 100644
--- a/src/de/szalkowski/activitylauncher/MainActivity.java
+++ b/src/de/szalkowski/activitylauncher/MainActivity.java
@@ -7,7 +7,6 @@ import android.content.Context;
import android.os.Build;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
-import android.util.Log;
import android.widget.ArrayAdapter;
public class MainActivity extends FragmentActivity implements
diff --git a/src/de/szalkowski/activitylauncher/MyActivityInfo.java b/src/de/szalkowski/activitylauncher/MyActivityInfo.java
index 07b1dd4..dbf9aff 100644
--- a/src/de/szalkowski/activitylauncher/MyActivityInfo.java
+++ b/src/de/szalkowski/activitylauncher/MyActivityInfo.java
@@ -8,7 +8,7 @@ import android.graphics.drawable.BitmapDrawable;
public class MyActivityInfo {
public MyActivityInfo(ComponentName activity, PackageManager pm) {
- this.componentName = activity;
+ this.component_name = activity;
ActivityInfo act;
try {
@@ -27,12 +27,14 @@ public class MyActivityInfo {
this.icon_resource = 0;
}
- try {
- this.icon_resource_name = pm.getResourcesForActivity(activity).getResourceName(this.icon_resource);
- } catch (Exception e) {}
+ if(this.icon_resource != 0) {
+ try {
+ this.icon_resource_name = pm.getResourcesForActivity(activity).getResourceName(this.icon_resource);
+ } catch (Exception e) {}
+ }
}
- public ComponentName componentName;
+ public ComponentName component_name;
public BitmapDrawable icon;
public int icon_resource;
public String icon_resource_name;
diff --git a/src/de/szalkowski/activitylauncher/MyPackageInfo.java b/src/de/szalkowski/activitylauncher/MyPackageInfo.java
index dfb4f1b..10bd21d 100644
--- a/src/de/szalkowski/activitylauncher/MyPackageInfo.java
+++ b/src/de/szalkowski/activitylauncher/MyPackageInfo.java
@@ -25,9 +25,11 @@ public class MyPackageInfo {
this.icon_resource = 0;
}
- try {
- this.icon_resource_name = pm.getResourcesForApplication(app).getResourceName(this.icon_resource);
- } catch (Exception e) {}
+ if(this.icon_resource != 0) {
+ try {
+ this.icon_resource_name = pm.getResourcesForApplication(app).getResourceName(this.icon_resource);
+ } catch (Exception e) {}
+ }
}
public String package_name;
diff --git a/src/de/szalkowski/activitylauncher/RecentTaskListFragment.java b/src/de/szalkowski/activitylauncher/RecentTaskListFragment.java
index c02a33b..d20dbf1 100644
--- a/src/de/szalkowski/activitylauncher/RecentTaskListFragment.java
+++ b/src/de/szalkowski/activitylauncher/RecentTaskListFragment.java
@@ -8,7 +8,6 @@ import org.thirdparty.LauncherIconCreator;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
@@ -26,7 +25,6 @@ import android.widget.ListView;
import android.widget.TextView;
public class RecentTaskListFragment extends ListFragment {
- final private String LOG = "de.szalkowski.activitylauncher";
protected List activities;
@Override
@@ -66,9 +64,8 @@ public class RecentTaskListFragment extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
- ComponentName activity = RecentTaskListFragment.this.activities.get(position).componentName;
- Intent intent = LauncherIconCreator.getActivityIntent(activity);
- RecentTaskListFragment.this.getActivity().startActivity(intent);
+ ComponentName activity = RecentTaskListFragment.this.activities.get(position).component_name;
+ LauncherIconCreator.launchActivity(getActivity(), activity);
}
@Override
@@ -89,8 +86,7 @@ public class RecentTaskListFragment extends ListFragment {
LauncherIconCreator.createLauncherIcon(getActivity(), activity);
break;
case 1:
- Intent intent = LauncherIconCreator.getActivityIntent(activity.componentName);
- getActivity().startActivity(intent);
+ LauncherIconCreator.launchActivity(getActivity(), activity.component_name);
break;
}
return super.onContextItemSelected(item);
diff --git a/src/org/thirdparty/LauncherIconCreator.java b/src/org/thirdparty/LauncherIconCreator.java
index 97b9711..5cdfc99 100644
--- a/src/org/thirdparty/LauncherIconCreator.java
+++ b/src/org/thirdparty/LauncherIconCreator.java
@@ -12,16 +12,16 @@
package org.thirdparty;
import de.szalkowski.activitylauncher.MyActivityInfo;
+import de.szalkowski.activitylauncher.MyPackageInfo;
+import de.szalkowski.activitylauncher.R;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
-import android.util.Log;
+import android.widget.Toast;
public class LauncherIconCreator {
- final static private String LOG = "de.szalkowski.thirdparty.launchericoncreator";
-
public static Intent getActivityIntent(ComponentName activity) {
Intent intent = new Intent();
intent.setComponent(activity);
@@ -32,10 +32,17 @@ public class LauncherIconCreator {
}
public static void createLauncherIcon(Context context, MyActivityInfo activity) {
- createLauncherIcon(context, activity.componentName, activity.name, activity.icon_resource_name);
+ createLauncherIcon(context, activity.component_name, activity.name, activity.icon_resource_name);
+ }
+
+ public static void createLauncherIcon(Context context, MyPackageInfo pack) {
+ Intent intent = context.getPackageManager().getLaunchIntentForPackage(pack.package_name);
+ createLauncherIcon(context, intent, pack.name, pack.icon_resource_name);
}
public static void createLauncherIcon(Context context, ComponentName activity, String name, BitmapDrawable icon) {
+ Toast.makeText(context, String.format(context.getText(R.string.creating_activity_shortcut).toString(), activity.flattenToShortString()), Toast.LENGTH_LONG).show();
+
Intent shortcutIntent = new Intent();
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getActivityIntent(activity));
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
@@ -45,7 +52,10 @@ public class LauncherIconCreator {
context.sendBroadcast(shortcutIntent);
//finish();
}
+
public static void createLauncherIcon(Context context, ComponentName activity, String name, String icon_resource_name) {
+ Toast.makeText(context, String.format(context.getText(R.string.creating_activity_shortcut).toString(), activity.flattenToShortString()), Toast.LENGTH_LONG).show();
+
Intent shortcutIntent = new Intent();
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getActivityIntent(activity));
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
@@ -57,4 +67,31 @@ public class LauncherIconCreator {
context.sendBroadcast(shortcutIntent);
//finish();
}
+
+ public static void createLauncherIcon(Context context, Intent intent, String name, String icon_resource_name) {
+ Toast.makeText(context, String.format(context.getText(R.string.creating_application_shortcut).toString(), name), Toast.LENGTH_LONG).show();
+
+ Intent shortcutIntent = new Intent();
+ shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
+ shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
+ Intent.ShortcutIconResource ir = new Intent.ShortcutIconResource();
+ ir.packageName = intent.getPackage();
+ ir.resourceName = icon_resource_name;
+ shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, ir);
+ shortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
+ context.sendBroadcast(shortcutIntent);
+ //finish();
+ }
+
+ public static void launchActivity(Context context, ComponentName activity) {
+ Intent intent = LauncherIconCreator.getActivityIntent(activity);
+ Toast.makeText(context, String.format(context.getText(R.string.starting_activity).toString(), activity.flattenToShortString()), Toast.LENGTH_LONG).show();
+ try {
+ context.startActivity(intent);
+ }
+ catch(Exception e) {
+ Toast.makeText(context, context.getText(R.string.error).toString() + ": " + e.toString(), Toast.LENGTH_LONG).show();
+ }
+
+ }
}