Subversion Repositories ES

Compare Revisions

Last modification

Ignore whitespace Rev 5 → Rev 6

/trunk/AndroidManifest.xml
26,7 → 26,7
android:label="@string/activity_lengths">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="android.intent.category.CONVERTER" />
</intent-filter>
</activity>
35,7 → 35,7
android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="android.intent.category.CONVERTER" />
</intent-filter>
</activity>
 
43,7 → 43,7
android:label="@string/activity_currencies">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="android.intent.category.CONVERTER" />
</intent-filter>
</activity>
</application>
/trunk/src/ch/ffhs/converter/ConverterApplication.java
17,7 → 17,6
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
34,6 → 33,11
*/
public class ConverterApplication extends Application
{
/**
* Activity category for automatically filtering converter Activities
*/
public final static String CATEGORY_CONVERTER =
"android.intent.category.CONVERTER";
 
@Override
public void onCreate()
42,7 → 46,7
* This populates the default values from the preferences XML file. See
* {@link DefaultValues} for more details.
*/
PreferenceManager.setDefaultValues(this, R.xml.default_values, false);
// PreferenceManager.setDefaultValues(this, R.xml.default_values, false);
}
 
@Override
/trunk/src/ch/ffhs/converter/app/LengthsActivity.java
1,12 → 1,60
package ch.ffhs.converter.app;
 
import ch.ffhs.converter.R;
import ch.ffhs.converter.R.layout;
import java.util.HashMap;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
import android.widget.Spinner;
import ch.ffhs.converter.R;
 
/**
* Activity that implements length conversion
*
* @author pelinux
*/
public class LengthsActivity extends Activity
{
/*
* Constants for mapping value strings to internal IDs
*/
private static final String VALUE_INCHES = "inch"; //$NON-NLS-1$
private static final String VALUE_METERS = "m"; //$NON-NLS-1$
private static final String VALUE_MILES = "mi"; //$NON-NLS-1$
private static final String VALUE_KILOMETERS = "km"; //$NON-NLS-1$
private static final int ITEM_INCHES = 0;
private static final int ITEM_METERS = 1;
private static final int ITEM_MILES = 2;
private static final int ITEM_KILOMETERS = 3;
 
/**
* Maps value strings to internal IDs
*/
private final static HashMap<String, Integer> valueToId =
new HashMap<String, Integer>();
 
/* Unit spinners (dropdowns) */
private Spinner spinnerUnit1;
private Spinner spinnerUnit2;
 
static
{
LengthsActivity.valueToId.put(LengthsActivity.VALUE_INCHES,
LengthsActivity.ITEM_INCHES);
LengthsActivity.valueToId.put(LengthsActivity.VALUE_METERS,
LengthsActivity.ITEM_METERS);
LengthsActivity.valueToId.put(LengthsActivity.VALUE_MILES,
LengthsActivity.ITEM_MILES);
LengthsActivity.valueToId.put(LengthsActivity.VALUE_KILOMETERS,
LengthsActivity.ITEM_KILOMETERS);
}
 
/** Called when the activity is first created. */
 
@Override
13,7 → 61,206
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.frm_laengen);
this.setContentView(R.layout.activity_lengths);
 
final EditText editValue1 = (EditText) this.findViewById(R.id.edit_value1);
final EditText editValue2 = (EditText) this.findViewById(R.id.edit_value2);
 
final OnKeyListener editValue1OnKey = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
Editable editable1 = ((EditText) v).getText();
 
double value1;
try
{
value1 = Double.parseDouble(editable1.toString());
}
catch (NumberFormatException e)
{
value1 = -1.0;
}
 
String string2 = ""; //$NON-NLS-1$
if (value1 >= 0.0)
{
string2 = LengthsActivity.this.getConvertedValue(value1, false);
}
 
editValue2.setText(string2);
 
return false;
}
};
editValue1.setOnKeyListener(editValue1OnKey);
 
final OnKeyListener editValue2OnKey = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
Editable editable2 = ((EditText) v).getText();
 
double value2;
try
{
value2 = Double.parseDouble(editable2.toString());
}
catch (NumberFormatException e)
{
value2 = -1.0;
}
 
String string1 = ""; //$NON-NLS-1$
if (value2 >= 0.0)
{
string1 = LengthsActivity.this.getConvertedValue(value2, true);
}
 
editValue1.setText(string1);
 
return false;
}
};
editValue2.setOnKeyListener(editValue2OnKey);
 
this.spinnerUnit1 = (Spinner) this.findViewById(R.id.spinner_unit1);
this.spinnerUnit2 = (Spinner) this.findViewById(R.id.spinner_unit2);
 
this.spinnerUnit1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
/* Simulate input in second EditText so that first EditText is updated */
editValue2OnKey.onKey(editValue2, 0, null);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
/* no-op */
}
});
 
this.spinnerUnit2.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
/* Simulate input in first EditText so that second EditText is updated */
editValue1OnKey.onKey(editValue1, 0, null);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
/* no-op */
}
});
}
 
/**
* @param value
* @return
*/
private String getConvertedValue(double value, boolean reverse)
{
int selectedItemPosition1 = this.spinnerUnit1.getSelectedItemPosition();
int selectedItemPosition2 = this.spinnerUnit2.getSelectedItemPosition();
String[] itemArray =
this.getResources().getStringArray(R.array.length_units_values);
String selectedItemValue1 = itemArray[selectedItemPosition1];
String selectedItemValue2 = itemArray[selectedItemPosition2];
 
if (reverse)
{
String tmp = selectedItemValue1;
selectedItemValue1 = selectedItemValue2;
selectedItemValue2 = tmp;
}
 
int itemId1 = LengthsActivity.valueToId.get(selectedItemValue1);
int itemId2 = LengthsActivity.valueToId.get(selectedItemValue2);
 
Double newValue = value;
 
switch (itemId1)
{
case ITEM_INCHES:
switch (itemId2)
{
case ITEM_METERS:
newValue = new Double(value * 0.0254);
break;
 
case ITEM_MILES:
/* 12 in/ft and 5280 ft/mi */
newValue = new Double(value / 12 / 5280);
break;
 
case ITEM_KILOMETERS:
/* see ITEM_METERS */
newValue = new Double((value * 0.0254) / 1000);
break;
}
break;
 
case ITEM_METERS:
switch (itemId2)
{
case ITEM_KILOMETERS:
newValue = new Double(value / 1000);
break;
 
case ITEM_INCHES:
/* 1 m = 39.370 in */
newValue = new Double(value * 39.370);
break;
 
case ITEM_MILES:
/* 1 mi = 1609.344 m */
newValue = new Double(value / 1609.344);
break;
}
break;
 
case ITEM_MILES:
switch (itemId2)
{
case ITEM_INCHES:
/* 1 mi = 5280 ft, 1 ft = 12 in */
newValue = new Double(value * 5280 * 12);
break;
 
case ITEM_METERS:
newValue = new Double(value * 1609.344);
break;
 
case ITEM_KILOMETERS:
newValue = new Double(value * 1.609344);
break;
}
break;
 
case ITEM_KILOMETERS:
switch (itemId2)
{
case ITEM_INCHES:
/* 1 m = 39.370 in */
newValue = new Double(value * 1000 * 39.370);
break;
 
case ITEM_METERS:
newValue = new Double(value * 1000);
break;
 
case ITEM_MILES:
newValue = new Double(value / 1.609344);
break;
}
}
 
return newValue.toString();
}
}
/trunk/src/ch/ffhs/converter/MenuActivity.java
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);
}
 
}
/trunk/bin/FFHS-Converter.apk
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/resources.ap_
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$layout.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$array.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/MenuActivity$1.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$xml.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/ConverterApplication.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$string.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/app/LengthsActivity.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/app/TemperaturesActivity.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/app/CurrenciesActivity.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$raw.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/MenuActivity.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/ch/ffhs/converter/R$id.class
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/bin/classes.dex
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/res/layout/frm_laengen.xml
File deleted
/trunk/res/layout/activity_lengths.xml
New file
0,0 → 1,30
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_height="fill_parent"
android:layout_width="fill_parent">
 
<TableLayout android:id="@+id/TableLayout01"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:stretchColumns="1,3" android:shrinkColumns="*"
android:layout_marginTop="10sp">
<TableRow android:layout_height="wrap_content">
<EditText android:layout_column="1" android:id="@+id/edit_value1"
android:inputType="numberDecimal" />
<TextView android:layout_column="2" android:text="="
android:gravity="center" android:textSize="25sp" />
<EditText android:layout_column="3"
android:id="@+id/edit_value2"
android:inputType="numberDecimal" />
</TableRow>
<TableRow android:layout_height="wrap_content">
<Spinner android:layout_column="1" android:id="@+id/spinner_unit1"
android:drawSelectorOnTop="true" android:entries="@array/length_units_display"
android:entryValues="@array/length_units_values" />
<TextView android:layout_column="2" android:text="" />
<Spinner android:layout_column="3" android:id="@+id/spinner_unit2"
android:drawSelectorOnTop="true" android:entries="@array/length_units_display"
android:entryValues="@array/length_units_values" />
 
</TableRow>
</TableLayout>
</LinearLayout>
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/res/values/strings.xml
===================================================================
--- trunk/res/values/strings.xml (revision 5)
+++ trunk/res/values/strings.xml (revision 6)
@@ -18,7 +18,6 @@
<string name="prompt01">Geben Sie den Betrag der Quellwährung ein:</string>
<string name="prompt02">Geben Sie die Ausgangstemperatur ein:</string>
- <string name="prompt03">Geben Sie das Ausgangsmass ein:</string>
<string name="title_checkbox_preference">Checkbox preference</string>
<string name="summary_checkbox_preference">This is a checkbox</string>
/trunk/res/values/arrays.xml
26,19 → 26,20
<item>KEL</item>
</array>
 
<array name="mas_display">
<item>Meter</item>
<item>Zoll (inch)</item>
<item>Kilometer</item>
<item>Meile</item>
</array>
<string-array name="length_units_display">
<item>in (inch)</item>
<item>m (meter)</item>
<item>mi (mile)</item>
<item>km (kilometer)</item>
</string-array>
 
<array name="mas_values">
<item>met</item>
<item>inc</item>
<item>kme</item>
<item>mle</item>
</array>
<string-array name="length_units_values">
<!-- TODO: Must not be "in", why? -->
<item>inch</item>
<item>m</item>
<item>mi</item>
<item>km</item>
</string-array>
<!-- Used in app/menu examples -->
<string-array name="entries_list_preference">
/trunk/res/xml/default_values.xml
File deleted
/trunk/res/xml/default_values_old.xml
New file
0,0 → 1,44
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
 
<!-- This is a primitive example showing how to set default values for preferences.
See DefaultValues.java for more information. -->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
 
<CheckBoxPreference
android:key="default_toggle"
android:defaultValue="true"
android:title="@string/title_checkbox_preference"
android:summary="@string/summary_checkbox_preference" />
 
<EditTextPreference
android:key="default_edittext"
android:defaultValue="@string/default_value_edittext_preference"
android:title="@string/title_edittext_preference"
android:summary="@string/summary_edittext_preference"
android:dialogTitle="@string/dialog_title_edittext_preference" />
<ListPreference
android:key="default_list"
android:defaultValue="@string/default_value_list_preference"
android:title="@string/title_list_preference"
android:summary="@string/summary_list_preference"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference"
android:dialogTitle="@string/dialog_title_list_preference" />
 
</PreferenceScreen>
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property