1,13 → 1,14 |
package ch.ffhs.converter; |
|
/* |
* Copyright (C) 2007 The Android Open Source Project |
* |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15,8 → 16,14 |
* limitations under the License. |
*/ |
|
import java.text.Collator; |
import java.util.ArrayList; |
import java.util.Collections; |
import java.util.Comparator; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
|
|
import android.app.ListActivity; |
import android.content.Intent; |
import android.content.pm.PackageManager; |
26,122 → 33,140 |
import android.widget.ListView; |
import android.widget.SimpleAdapter; |
|
import java.text.Collator; |
import java.util.ArrayList; |
import java.util.Collections; |
import java.util.Comparator; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
public class MenuActivity extends ListActivity |
{ |
|
public class MenuActivity extends ListActivity { |
@Override |
public void onCreate(Bundle savedInstanceState) |
{ |
super.onCreate(savedInstanceState); |
|
@Override |
public void onCreate(Bundle savedInstanceState) { |
super.onCreate(savedInstanceState); |
|
Intent intent = getIntent(); |
String path = intent.getStringExtra("ch.ffhs.converter.Path"); |
|
if (path == null) { |
path = ""; |
} |
Intent intent = this.getIntent(); |
String path = intent.getStringExtra("ch.ffhs.converter.Path"); |
|
setListAdapter(new SimpleAdapter(this, getData(path), |
if (path == null) |
{ |
path = ""; |
} |
|
this.setListAdapter(new SimpleAdapter(this, this.getData(path), |
android.R.layout.simple_list_item_1, new String[] { "title" }, |
new int[] { android.R.id.text1 })); |
getListView().setTextFilterEnabled(true); |
this.getListView().setTextFilterEnabled(true); |
} |
|
protected List getData(String prefix) |
{ |
List<Map> myData = new ArrayList<Map>(); |
|
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); |
mainIntent.addCategory(ConverterApplication.CATEGORY_CONVERTER); |
|
PackageManager pm = this.getPackageManager(); |
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); |
|
if (null == list) |
{ |
return myData; |
} |
|
protected List getData(String prefix) { |
List<Map> myData = new ArrayList<Map>(); |
String[] prefixPath; |
|
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); |
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE); |
if (prefix.equals("")) |
{ |
prefixPath = null; |
} |
else |
{ |
prefixPath = prefix.split("/"); |
} |
|
PackageManager pm = getPackageManager(); |
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); |
int len = list.size(); |
|
if (null == list) |
return myData; |
Map<String, Boolean> entries = new HashMap<String, Boolean>(); |
|
String[] prefixPath; |
|
if (prefix.equals("")) { |
prefixPath = null; |
} else { |
prefixPath = prefix.split("/"); |
} |
|
int len = list.size(); |
|
Map<String, Boolean> entries = new HashMap<String, Boolean>(); |
|
for (int i = 0; i < len; i++) { |
ResolveInfo info = list.get(i); |
CharSequence labelSeq = info.loadLabel(pm); |
String label = labelSeq != null |
for (int i = 0; i < len; i++) |
{ |
ResolveInfo info = list.get(i); |
CharSequence labelSeq = info.loadLabel(pm); |
String label = labelSeq != null |
? labelSeq.toString() |
: info.activityInfo.name; |
|
if (prefix.length() == 0 || label.startsWith(prefix)) { |
|
String[] labelPath = label.split("/"); |
|
String nextLabel = prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; |
if (prefix.length() == 0 || label.startsWith(prefix)) |
{ |
|
if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) { |
addItem(myData, nextLabel, activityIntent( |
String[] labelPath = label.split("/"); |
|
String nextLabel = |
prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; |
|
if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) |
{ |
this.addItem(myData, nextLabel, this.activityIntent( |
info.activityInfo.applicationInfo.packageName, |
info.activityInfo.name)); |
} else { |
if (entries.get(nextLabel) == null) { |
addItem(myData, nextLabel, browseIntent(prefix.equals("") ? nextLabel : prefix + "/" + nextLabel)); |
entries.put(nextLabel, true); |
} |
} |
} |
} |
|
Collections.sort(myData, sDisplayNameComparator); |
|
return myData; |
else |
{ |
if (entries.get(nextLabel) == null) |
{ |
this.addItem( |
myData, |
nextLabel, |
this.browseIntent(prefix.equals("") ? nextLabel : prefix + "/" |
+ nextLabel)); |
entries.put(nextLabel, true); |
} |
} |
} |
} |
|
private final static Comparator<Map> sDisplayNameComparator = new Comparator<Map>() { |
private final Collator collator = Collator.getInstance(); |
Collections.sort(myData, MenuActivity.sDisplayNameComparator); |
|
public int compare(Map map1, Map map2) { |
return collator.compare(map1.get("title"), map2.get("title")); |
} |
return myData; |
} |
|
private final static Comparator<Map> sDisplayNameComparator = |
new Comparator<Map>() { |
private final Collator collator = Collator.getInstance(); |
|
public int compare(Map map1, Map map2) |
{ |
return this.collator.compare(map1.get("title"), map2.get("title")); |
} |
}; |
|
protected Intent activityIntent(String pkg, String componentName) { |
Intent result = new Intent(); |
result.setClassName(pkg, componentName); |
return result; |
} |
|
protected Intent browseIntent(String path) { |
Intent result = new Intent(); |
result.setClass(this, MenuActivity.class); |
result.putExtra("ch.ffhs.converter.Path", path); |
return result; |
} |
protected Intent activityIntent(String pkg, String componentName) |
{ |
Intent result = new Intent(); |
result.setClassName(pkg, componentName); |
return result; |
} |
|
protected void addItem(List<Map> data, String name, Intent intent) { |
Map<String, Object> temp = new HashMap<String, Object>(); |
temp.put("title", name); |
temp.put("intent", intent); |
data.add(temp); |
} |
protected Intent browseIntent(String path) |
{ |
Intent result = new Intent(); |
result.setClass(this, MenuActivity.class); |
result.putExtra("ch.ffhs.converter.Path", path); |
return result; |
} |
|
@Override |
protected void onListItemClick(ListView l, View v, int position, long id) { |
Map map = (Map) l.getItemAtPosition(position); |
protected void addItem(List<Map> data, String name, Intent intent) |
{ |
Map<String, Object> temp = new HashMap<String, Object>(); |
temp.put("title", name); |
temp.put("intent", intent); |
data.add(temp); |
} |
|
Intent intent = (Intent) map.get("intent"); |
startActivity(intent); |
} |
@Override |
protected void onListItemClick(ListView l, View v, int position, long id) |
{ |
Map map = (Map) l.getItemAtPosition(position); |
|
Intent intent = (Intent) map.get("intent"); |
this.startActivity(intent); |
} |
|
} |