Skip to content
This repository was archived by the owner on Nov 23, 2022. It is now read-only.

Commit a7ebcec

Browse files
author
WebDucer
committed
Stand 07.04.2014
1 parent bb5b99f commit a7ebcec

7 files changed

Lines changed: 233 additions & 85 deletions

File tree

Zeiterfassung/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<provider
2222
android:name=".db.ZeitProvider"
2323
android:authorities="de.mvhs.android.zeiterfassung.zeitprovider" />
24+
<activity android:name="AuflistungActivity"></activity>
2425
</application>
2526

2627
</manifest>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="match_parent"
5+
android:id="@android:id/list" >
6+
7+
8+
</ListView>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
3+
<item android:id="@+id/mnu_list" android:title="@string/mnu_list" android:showAsAction="ifRoom"></item>
4+
5+
6+
</menu>

Zeiterfassung/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
<string name="EndButton">BEENDEN</string>
99
<string name="PauseLabel">Pause:</string>
1010
<string name="CommentLabel">Kommentar:</string>
11+
<string name="mnu_list">Auflistung</string>
1112

1213
</resources>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package de.mvhs.android.zeiterfassung;
2+
3+
import android.app.ListActivity;
4+
import android.database.Cursor;
5+
import android.os.Bundle;
6+
import android.view.MenuItem;
7+
import android.widget.SimpleCursorAdapter;
8+
import de.mvhs.android.zeiterfassung.db.ZeitContracts;
9+
10+
public class AuflistungActivity extends ListActivity {
11+
@Override
12+
protected void onCreate(Bundle savedInstanceState) {
13+
super.onCreate(savedInstanceState);
14+
15+
setContentView(R.layout.activity_list);
16+
17+
getActionBar().setDisplayHomeAsUpEnabled(true);
18+
getActionBar().setDisplayShowHomeEnabled(true);
19+
}
20+
21+
@Override
22+
protected void onStart() {
23+
super.onStart();
24+
25+
// Laden der Daten
26+
// -- Einen Adapter initialisieren
27+
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, // Context
28+
android.R.layout.simple_list_item_2, // Layout für die Zeile
29+
null, // Cursor Daten
30+
new String[] { ZeitContracts.Zeit.Columns.START,
31+
ZeitContracts.Zeit.Columns.END }, new int[] {
32+
android.R.id.text1, android.R.id.text2 }, // UI-Elemente
33+
// in denen
34+
// diese
35+
// Werte
36+
// dargestellt
37+
// werden
38+
// sollen
39+
0);
40+
41+
// Laden der Daten
42+
Cursor data = getContentResolver().query(
43+
ZeitContracts.Zeit.CONTENT_URI, null, null, null, null);
44+
45+
// Zuordnung des Adapters zur Liste
46+
getListView().setAdapter(adapter);
47+
48+
// Daten an Adapter übergeben
49+
adapter.swapCursor(data);
50+
}
51+
52+
@Override
53+
public boolean onOptionsItemSelected(MenuItem item) {
54+
switch (item.getItemId()) {
55+
case android.R.id.home:
56+
this.finish();
57+
58+
break;
59+
60+
default:
61+
break;
62+
}
63+
return super.onOptionsItemSelected(item);
64+
}
65+
}
Lines changed: 141 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package de.mvhs.android.zeiterfassung;
22

3+
import java.text.DateFormat;
4+
import java.text.ParseException;
35
import java.util.Date;
46

57
import android.app.Activity;
68
import android.content.ContentUris;
79
import android.content.ContentValues;
10+
import android.content.Intent;
811
import android.database.Cursor;
912
import android.net.Uri;
1013
import android.os.Bundle;
14+
import android.view.Menu;
15+
import android.view.MenuItem;
1116
import android.view.View;
1217
import android.view.View.OnClickListener;
1318
import android.widget.Button;
@@ -16,118 +21,169 @@
1621

1722
public class MainActivity extends Activity {
1823

19-
private boolean _IsStarted = false;
20-
private Button _StartCommand = null;
21-
private Button _StopCommand = null;
22-
private EditText _StartTime = null;
23-
private EditText _EndTime = null;
24-
private long _CurrentId = -1;
24+
private boolean _IsStarted = false;
25+
private Button _StartCommand = null;
26+
private Button _StopCommand = null;
27+
private EditText _StartTime = null;
28+
private EditText _EndTime = null;
29+
private long _CurrentId = -1;
2530

26-
private final static String[] _SEARCH_PROJECTION = { ZeitContracts.Zeit.Columns._ID, ZeitContracts.Zeit.Columns.START };
27-
private final static String _SEARCH_SELECTION = "IFNULL(" + ZeitContracts.Zeit.Columns.START + ",'')=''";
31+
private final static String[] _SEARCH_PROJECTION = {
32+
ZeitContracts.Zeit.Columns._ID, ZeitContracts.Zeit.Columns.START };
33+
private final static String _SEARCH_SELECTION = "IFNULL("
34+
+ ZeitContracts.Zeit.Columns.END + ",'')=''";
2835

29-
@Override
30-
protected void onCreate(Bundle savedInstanceState) {
31-
super.onCreate(savedInstanceState);
36+
private final static DateFormat _UI_DATE_FORMATTER = DateFormat
37+
.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
3238

33-
setContentView(R.layout.activity_main);
34-
}
39+
@Override
40+
protected void onCreate(Bundle savedInstanceState) {
41+
super.onCreate(savedInstanceState);
3542

36-
@Override
37-
protected void onStart() {
38-
super.onStart();
43+
setContentView(R.layout.activity_main);
44+
}
3945

40-
// UI Elemente initialisieren
41-
_StartCommand = (Button) findViewById(R.id.StartCommand);
42-
_StopCommand = (Button) findViewById(R.id.EndCommand);
43-
_StartTime = (EditText) findViewById(R.id.StartTime);
44-
_EndTime = (EditText) findViewById(R.id.EndTime);
46+
@Override
47+
protected void onStart() {
48+
super.onStart();
4549

46-
// Click Event registrieren
47-
_StartCommand.setOnClickListener(new OnStartButtonClicked());
48-
_StopCommand.setOnClickListener(new OnEndButtonClicked());
50+
// UI Elemente initialisieren
51+
_StartCommand = (Button) findViewById(R.id.StartCommand);
52+
_StopCommand = (Button) findViewById(R.id.EndCommand);
53+
_StartTime = (EditText) findViewById(R.id.StartTime);
54+
_EndTime = (EditText) findViewById(R.id.EndTime);
4955

50-
// Bearbeitung in den Textfeldern verbieten
51-
_StartTime.setKeyListener(null);
52-
_EndTime.setKeyListener(null);
56+
// Click Event registrieren
57+
_StartCommand.setOnClickListener(new OnStartButtonClicked());
58+
_StopCommand.setOnClickListener(new OnEndButtonClicked());
5359

54-
// Prüfen, ob ein angefangener Eintrag in der Datenbank vorliegt
55-
checkTrackState();
56-
}
60+
// Bearbeitung in den Textfeldern verbieten
61+
_StartTime.setKeyListener(null);
62+
_EndTime.setKeyListener(null);
5763

58-
@Override
59-
protected void onStop() {
60-
// Click Event deregistrieren
61-
_StartCommand.setOnClickListener(null);
62-
_StopCommand.setOnClickListener(null);
64+
// Prüfen, ob ein angefangener Eintrag in der Datenbank vorliegt
65+
checkTrackState();
66+
}
6367

64-
super.onStop();
65-
}
68+
@Override
69+
protected void onStop() {
70+
// Click Event deregistrieren
71+
_StartCommand.setOnClickListener(null);
72+
_StopCommand.setOnClickListener(null);
6673

67-
private void setButtonState() {
74+
super.onStop();
75+
}
6876

69-
_StartCommand.setEnabled(_IsStarted == false);
70-
_StopCommand.setEnabled(_IsStarted);
71-
}
77+
@Override
78+
public boolean onCreateOptionsMenu(Menu menu) {
79+
getMenuInflater().inflate(R.menu.main_menu, menu);
7280

73-
private void checkTrackState() {
74-
Cursor data = getContentResolver().query(ZeitContracts.Zeit.CONTENT_URI, _SEARCH_PROJECTION, _SEARCH_SELECTION, null, null);
81+
return super.onCreateOptionsMenu(menu);
82+
}
7583

76-
if (data != null && data.moveToFirst()) {
77-
// Ein Eintrag gefunden
78-
_CurrentId = data.getLong(0);
84+
@Override
85+
public boolean onOptionsItemSelected(MenuItem item) {
7986

80-
String startDate = data.getString(1);
87+
// Menüpunkt herausfinden
88+
switch (item.getItemId()) {
89+
case R.id.mnu_list:
90+
// Aktion für unser List-Menü-Eintrag
91+
Intent listIntent = new Intent(this, AuflistungActivity.class);
92+
startActivity(listIntent);
93+
break;
8194

82-
_StartTime.setText(startDate);
83-
_EndTime.setText("");
95+
default:
96+
break;
97+
}
8498

85-
_IsStarted = true;
86-
} else {
87-
// Keine Einträge gefunden
88-
_StartTime.setText("");
89-
_EndTime.setText("");
99+
return super.onOptionsItemSelected(item);
100+
}
90101

91-
_IsStarted = false;
92-
}
102+
private void setButtonState() {
93103

94-
setButtonState();
95-
}
104+
_StartCommand.setEnabled(_IsStarted == false);
105+
_StopCommand.setEnabled(_IsStarted);
106+
}
96107

97-
private final class OnEndButtonClicked implements OnClickListener {
98-
@Override
99-
public void onClick(View v) {
100-
// Verhalten beim Click auf den Ende-Button
101-
Date currentTime = new Date();
102-
_EndTime.setText(currentTime.toString());
108+
private void checkTrackState() {
109+
Cursor data = getContentResolver().query(
110+
ZeitContracts.Zeit.CONTENT_URI, _SEARCH_PROJECTION,
111+
_SEARCH_SELECTION, null, null);
103112

104-
ContentValues values = new ContentValues();
105-
values.put(ZeitContracts.Zeit.Columns.END, currentTime.toString());
113+
if (data != null && data.moveToFirst()) {
114+
// Ein Eintrag gefunden
115+
_CurrentId = data.getLong(0);
106116

107-
Uri updateUri = ContentUris.withAppendedId(ZeitContracts.Zeit.CONTENT_URI, _CurrentId);
117+
String startDate = data.getString(1);
108118

109-
getContentResolver().update(updateUri, values, null, null);
119+
try {
120+
// Konvertierung des Datums aus der Datenbank
121+
Date startTime = ZeitContracts.Converters.DB_FORMATTER
122+
.parse(startDate);
110123

111-
_IsStarted = false;
112-
setButtonState();
113-
}
114-
}
124+
// Ausgabe an der UI
125+
_StartTime.setText(_UI_DATE_FORMATTER.format(startTime));
115126

116-
private final class OnStartButtonClicked implements OnClickListener {
117-
@Override
118-
public void onClick(View v) {
119-
// Verhalten beim Klick auf den Strat Button
120-
Date currentTime = new Date();
121-
_StartTime.setText(currentTime.toString());
127+
} catch (ParseException e) {
128+
e.printStackTrace();
129+
}
122130

123-
ContentValues values = new ContentValues();
124-
values.put(ZeitContracts.Zeit.Columns.START, currentTime.toString());
131+
_EndTime.setText("");
125132

126-
getContentResolver().insert(ZeitContracts.Zeit.CONTENT_URI, values);
133+
_IsStarted = true;
134+
} else {
135+
// Keine Einträge gefunden
136+
_StartTime.setText("");
137+
_EndTime.setText("");
127138

128-
_IsStarted = true;
129-
setButtonState();
130-
}
139+
_IsStarted = false;
140+
}
131141

132-
}
142+
setButtonState();
143+
}
144+
145+
private final class OnEndButtonClicked implements OnClickListener {
146+
@Override
147+
public void onClick(View v) {
148+
// Verhalten beim Click auf den Ende-Button
149+
Date currentTime = new Date();
150+
_EndTime.setText(_UI_DATE_FORMATTER.format(currentTime));
151+
152+
ContentValues values = new ContentValues();
153+
values.put(ZeitContracts.Zeit.Columns.END,
154+
ZeitContracts.Converters.DB_FORMATTER.format(currentTime));
155+
156+
Uri updateUri = ContentUris.withAppendedId(
157+
ZeitContracts.Zeit.CONTENT_URI, _CurrentId);
158+
159+
getContentResolver().update(updateUri, values, null, null);
160+
161+
_CurrentId = -1;
162+
163+
_IsStarted = false;
164+
setButtonState();
165+
}
166+
}
167+
168+
private final class OnStartButtonClicked implements OnClickListener {
169+
@Override
170+
public void onClick(View v) {
171+
// Verhalten beim Klick auf den Strat Button
172+
Date currentTime = new Date();
173+
_StartTime.setText(_UI_DATE_FORMATTER.format(currentTime));
174+
175+
ContentValues values = new ContentValues();
176+
values.put(ZeitContracts.Zeit.Columns.START,
177+
ZeitContracts.Converters.DB_FORMATTER.format(currentTime));
178+
179+
Uri insertUri = getContentResolver().insert(
180+
ZeitContracts.Zeit.CONTENT_URI, values);
181+
182+
_CurrentId = ContentUris.parseId(insertUri);
183+
184+
_IsStarted = true;
185+
setButtonState();
186+
}
187+
188+
}
133189
}

Zeiterfassung/src/de/mvhs/android/zeiterfassung/db/ZeitContracts.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package de.mvhs.android.zeiterfassung.db;
22

3+
import java.text.DateFormat;
4+
import java.text.SimpleDateFormat;
5+
36
import android.content.ContentResolver;
47
import android.net.Uri;
58
import android.provider.BaseColumns;
@@ -16,6 +19,14 @@ public final class ZeitContracts {
1619
*/
1720
public final static Uri AUTHORITY_URI = Uri.parse("content://" + BASE_PATH);
1821

22+
public final static class Converters {
23+
// Format Pattern
24+
private final static String _DB_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm";
25+
26+
public final static DateFormat DB_FORMATTER = new SimpleDateFormat(
27+
_DB_DATE_PATTERN);
28+
}
29+
1930
/**
2031
* Klasse für die Beschreibung der Tabelle
2132
*/

0 commit comments

Comments
 (0)