Implemented Activity-based list (reuses AppDemos project)
/trunk/src/ch/ffhs/converter/app/CurrenciesActivity.java |
---|
0,0 → 1,51 |
/* |
* Copyright (C) 2008 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 |
* |
* 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. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package ch.ffhs.converter.app; |
// Need the following import to get access to the app resources, since this |
// class is in a sub-package. |
import android.app.Activity; |
import android.os.Bundle; |
import ch.ffhs.converter.R; |
/** |
* <h3>Dialog Activity</h3> |
* |
* <p> |
* This demonstrates the how to write an activity that looks like a pop-up |
* dialog with a custom theme using a different text color. |
* </p> |
*/ |
public class CurrenciesActivity extends Activity |
{ |
/** |
* Initialization of the Activity after it is first created. Must at least |
* call {@link android.app.Activity#setContentView setContentView()} to |
* describe what is to be displayed in the screen. |
*/ |
@Override |
protected void onCreate(Bundle savedInstanceState) |
{ |
// Be sure to call the super class. |
super.onCreate(savedInstanceState); |
// See assets/res/any/layout/dialog_activity.xml for this |
// view layout definition, which is being set here as |
// the content of our screen. |
this.setContentView(R.layout.custom_dialog_activity); |
} |
} |
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+text/plain |
\ No newline at end of property |
Index: app/LengthsActivity.java |
=================================================================== |
--- app/LengthsActivity.java (nonexistent) |
+++ app/LengthsActivity.java (revision 5) |
@@ -0,0 +1,19 @@ |
+package ch.ffhs.converter.app; |
+ |
+import ch.ffhs.converter.R; |
+import ch.ffhs.converter.R.layout; |
+import android.app.Activity; |
+import android.os.Bundle; |
+ |
+public class LengthsActivity extends Activity |
+{ |
+ /** Called when the activity is first created. */ |
+ |
+ @Override |
+ public void onCreate(Bundle savedInstanceState) |
+ { |
+ super.onCreate(savedInstanceState); |
+ this.setContentView(R.layout.frm_laengen); |
+ } |
+ |
+} |
/app/LengthsActivity.java |
---|
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+text/plain |
\ No newline at end of property |
Index: app/TemperaturesActivity.java |
=================================================================== |
--- app/TemperaturesActivity.java (nonexistent) |
+++ app/TemperaturesActivity.java (revision 5) |
@@ -0,0 +1,57 @@ |
+/* |
+ * Copyright (C) 2008 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 |
+ * |
+ * 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. |
+ * See the License for the specific language governing permissions and |
+ * limitations under the License. |
+ */ |
+ |
+package ch.ffhs.converter.app; |
+ |
+// Need the following import to get access to the app resources, since this |
+// class is in a sub-package. |
+import android.app.Activity; |
+import android.os.Bundle; |
+import android.view.Window; |
+import ch.ffhs.converter.R; |
+ |
+/** |
+ * <h3>Dialog Activity</h3> |
+ * |
+ * <p> |
+ * This demonstrates the how to write an activity that looks like a pop-up |
+ * dialog. |
+ * </p> |
+ */ |
+public class TemperaturesActivity extends Activity |
+{ |
+ /** |
+ * Initialization of the Activity after it is first created. Must at least |
+ * call {@link android.app.Activity#setContentView setContentView()} to |
+ * describe what is to be displayed in the screen. |
+ */ |
+ @Override |
+ protected void onCreate(Bundle savedInstanceState) |
+ { |
+ // Be sure to call the super class. |
+ super.onCreate(savedInstanceState); |
+ |
+ this.requestWindowFeature(Window.FEATURE_LEFT_ICON); |
+ |
+ // See assets/res/any/layout/dialog_activity.xml for this |
+ // view layout definition, which is being set here as |
+ // the content of our screen. |
+ this.setContentView(R.layout.dialog_activity); |
+ |
+ this.getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, |
+ android.R.drawable.ic_dialog_alert); |
+ } |
+} |
/app/TemperaturesActivity.java |
---|
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+text/plain |
\ No newline at end of property |
Index: MenuActivity.java |
=================================================================== |
--- MenuActivity.java (revision 4) |
+++ MenuActivity.java (revision 5) |
@@ -1,13 +1,147 @@ |
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 |
+ * |
+ * 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. |
+ * See the License for the specific language governing permissions and |
+ * limitations under the License. |
+ */ |
-import android.app.Activity; |
+ |
+ |
+import android.app.ListActivity; |
+import android.content.Intent; |
+import android.content.pm.PackageManager; |
+import android.content.pm.ResolveInfo; |
import android.os.Bundle; |
+import android.view.View; |
+import android.widget.ListView; |
+import android.widget.SimpleAdapter; |
-public class MenuActivity extends Activity { |
- /** Called when the activity is first created. */ |
+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 { |
+ |
@Override |
public void onCreate(Bundle savedInstanceState) { |
super.onCreate(savedInstanceState); |
- setContentView(R.layout.main); |
+ |
+ Intent intent = getIntent(); |
+ String path = intent.getStringExtra("ch.ffhs.converter.Path"); |
+ |
+ if (path == null) { |
+ path = ""; |
+ } |
+ |
+ setListAdapter(new SimpleAdapter(this, getData(path), |
+ android.R.layout.simple_list_item_1, new String[] { "title" }, |
+ new int[] { android.R.id.text1 })); |
+ getListView().setTextFilterEnabled(true); |
} |
-} |
\ No newline at end of file |
+ |
+ protected List getData(String prefix) { |
+ List<Map> myData = new ArrayList<Map>(); |
+ |
+ Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); |
+ mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE); |
+ |
+ PackageManager pm = getPackageManager(); |
+ List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); |
+ |
+ if (null == list) |
+ return myData; |
+ |
+ 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 |
+ ? 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 ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) { |
+ addItem(myData, nextLabel, 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; |
+ } |
+ |
+ private final static Comparator<Map> sDisplayNameComparator = new Comparator<Map>() { |
+ private final Collator collator = Collator.getInstance(); |
+ |
+ public int compare(Map map1, Map map2) { |
+ return 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 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); |
+ } |
+ |
+ @Override |
+ protected void onListItemClick(ListView l, View v, int position, long id) { |
+ Map map = (Map) l.getItemAtPosition(position); |
+ |
+ Intent intent = (Intent) map.get("intent"); |
+ startActivity(intent); |
+ } |
+ |
+} |
/trunk/src/ch/ffhs/converter/ConverterApplication.java |
---|
0,0 → 1,52 |
/* |
* 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 |
* |
* 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. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package ch.ffhs.converter; |
import android.app.Application; |
import android.preference.PreferenceManager; |
/** |
* This is an example of a {@link android.app.Application} class. Ordinarily you |
* would use |
* a class like this as a central repository for information that might be |
* shared between multiple |
* activities. |
* |
* In this case, we have not defined any specific work for this Application. |
* |
* See samples/ApiDemos/tests/src/ch.ffhs.converter/ApiDemosApplicationTests for |
* an example |
* of how to perform unit tests on an Application object. |
*/ |
public class ConverterApplication extends Application |
{ |
@Override |
public void onCreate() |
{ |
/* |
* This populates the default values from the preferences XML file. See |
* {@link DefaultValues} for more details. |
*/ |
PreferenceManager.setDefaultValues(this, R.xml.default_values, false); |
} |
@Override |
public void onTerminate() |
{ |
} |
} |
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+text/plain |
\ No newline at end of property |