Skip to content

Commit a60f61f

Browse files
committed
Updates of the examples from the last Android training
1 parent 89b9307 commit a60f61f

File tree

19 files changed

+288
-63
lines changed

19 files changed

+288
-63
lines changed

com.example.android.rssfeed/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
<uses-sdk
77
android:minSdkVersion="16"
88
android:targetSdkVersion="19" />
9-
j
9+
1010
<uses-permission android:name="android.permission.INTERNET" />
11-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
1211

1312
<application
1413
android:name="RssApplication"
@@ -31,6 +30,9 @@
3130
</activity>
3231
<activity android:name="MyPreferenceActivity" >
3332
</activity>
33+
34+
<service android:name="RssDownloadService" >
35+
</service>
3436
</application>
3537

3638
</manifest>

com.example.android.rssfeed/src/com/example/android/rssfeed/MyListFragment.java

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,73 @@
11
package com.example.android.rssfeed;
22

3-
import java.util.ArrayList;
43
import java.util.List;
54

65
import android.app.Activity;
76
import android.app.ListFragment;
8-
import android.os.AsyncTask;
7+
import android.content.BroadcastReceiver;
8+
import android.content.Context;
9+
import android.content.Intent;
10+
import android.content.IntentFilter;
911
import android.os.Bundle;
1012
import android.view.View;
1113
import android.widget.ArrayAdapter;
14+
import android.widget.ListAdapter;
1215
import android.widget.ListView;
1316

14-
import com.example.android.rssfeedlibrary.RssFeedProvider;
1517
import com.example.android.rssfeedlibrary.RssItem;
1618

1719
public class MyListFragment extends ListFragment {
1820
private OnItemSelectedListener listener;
19-
ParseTask parseTask;
21+
22+
private BroadcastReceiver receiver = new BroadcastReceiver() {
23+
@Override
24+
public void onReceive(Context context, Intent intent) {
25+
setListContent(RssApplication.list);
26+
}
27+
};
2028

2129
@Override
2230
public void onCreate(Bundle savedInstanceState) {
2331
super.onCreate(savedInstanceState);
24-
List<RssItem> list = new ArrayList<RssItem>();
32+
List<RssItem> list = RssApplication.list;
2533
MyAdapter adapter = new MyAdapter(getActivity(),
2634
android.R.layout.simple_list_item_1, list);
2735
setListAdapter(adapter);
28-
setRetainInstance(true);
36+
// setRetainInstance(true);
37+
2938
}
39+
40+
@Override
41+
public void onResume() {
42+
super.onResume();
43+
MyAdapter adapter = (MyAdapter) getListAdapter();
44+
adapter.notifyDataSetChanged();
45+
getActivity().registerReceiver(receiver,
46+
new IntentFilter(RssDownloadService.NOTIFICATION));
47+
}
48+
3049

31-
// @Override
32-
// public View onCreateView(LayoutInflater inflater, ViewGroup container,
33-
// Bundle savedInstanceState) {
34-
// View view = inflater.inflate(R.layout.fragment_rsslist_overview,
35-
// container, false);
36-
//
37-
// return view;
38-
// }
39-
50+
@Override
51+
public void onStop() {
52+
super.onStop();
53+
getActivity().unregisterReceiver(receiver);
54+
}
4055
@Override
4156
public void onListItemClick(ListView l, View v, int position, long id) {
4257
RssItem item = (RssItem) getListAdapter().getItem(position);
4358
updateDetail(item);
4459
}
4560

46-
private static class ParseTask extends
47-
AsyncTask<String, Void, List<RssItem>> {
48-
private MyListFragment fragment;
49-
50-
public void setFragment(MyListFragment fragment) {
51-
this.fragment = fragment;
52-
}
53-
54-
@Override
55-
protected List<RssItem> doInBackground(String... params) {
56-
List<RssItem> list = RssFeedProvider.parse(params[0]);
57-
return list;
58-
}
59-
60-
@Override
61-
protected void onPostExecute(List<RssItem> result) {
62-
fragment.setListContent(result);
63-
}
64-
}
65-
6661
public void updateListContent() {
67-
if (parseTask == null) {
68-
parseTask = new ParseTask();
69-
parseTask.setFragment(this);
70-
parseTask.execute("http://www.vogella.com/article.rss");
71-
}
62+
Intent intent = new Intent(getActivity(), RssDownloadService.class);
63+
intent.putExtra("url", "http://www.vogella.com/article.rss");
64+
getActivity().startService(intent);
7265
}
7366

7467
public void setListContent(List<RssItem> result) {
7568
ArrayAdapter listAdapter = (ArrayAdapter) getListAdapter();
7669
listAdapter.clear();
7770
listAdapter.addAll(result);
78-
parseTask.setFragment(null);
79-
parseTask = null;
8071
}
8172

8273
public interface OnItemSelectedListener {
Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,63 @@
11
package com.example.android.rssfeed;
22

3+
import android.content.SharedPreferences;
4+
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
35
import android.os.Bundle;
6+
import android.preference.EditTextPreference;
7+
import android.preference.ListPreference;
8+
import android.preference.Preference;
49
import android.preference.PreferenceActivity;
10+
import android.preference.PreferenceCategory;
511

6-
public class MyPreferenceActivity extends PreferenceActivity {
12+
public class MyPreferenceActivity extends PreferenceActivity implements
13+
OnSharedPreferenceChangeListener {
714

8-
/** Called when the activity is first created. */
915
@Override
1016
public void onCreate(Bundle savedInstanceState) {
1117
super.onCreate(savedInstanceState);
1218
addPreferencesFromResource(R.xml.myprefs);
19+
20+
// show the current value in the settings screen
21+
for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
22+
initSummary(getPreferenceScreen().getPreference(i));
23+
}
24+
}
25+
26+
@Override
27+
protected void onResume() {
28+
super.onResume();
29+
getPreferenceScreen().getSharedPreferences()
30+
.registerOnSharedPreferenceChangeListener(this);
31+
}
32+
33+
@Override
34+
protected void onPause() {
35+
super.onPause();
36+
getPreferenceScreen().getSharedPreferences()
37+
.unregisterOnSharedPreferenceChangeListener(this);
38+
}
39+
40+
@Override
41+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
42+
String key) {
43+
updatePreferences(findPreference(key));
44+
}
45+
46+
private void initSummary(Preference p) {
47+
if (p instanceof PreferenceCategory) {
48+
PreferenceCategory cat = (PreferenceCategory) p;
49+
for (int i = 0; i < cat.getPreferenceCount(); i++) {
50+
initSummary(cat.getPreference(i));
51+
}
52+
} else {
53+
updatePreferences(p);
54+
}
55+
}
56+
57+
private void updatePreferences(Preference p) {
58+
if (p instanceof EditTextPreference) {
59+
EditTextPreference editTextPref = (EditTextPreference) p;
60+
p.setSummary(editTextPref.getText());
61+
}
1362
}
1463
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.android.rssfeed;
2+
3+
import java.util.List;
4+
5+
import android.app.IntentService;
6+
import android.content.Intent;
7+
import android.os.Bundle;
8+
9+
import com.example.android.rssfeedlibrary.RssFeedProvider;
10+
import com.example.android.rssfeedlibrary.RssItem;
11+
12+
public class RssDownloadService extends IntentService {
13+
public static String NOTIFICATION = "rssfeedupdated";
14+
public RssDownloadService() {
15+
super("RssDownloadService");
16+
}
17+
18+
@Override
19+
protected void onHandleIntent(Intent intent) {
20+
Bundle extras = intent.getExtras();
21+
String string = extras.getString("url");
22+
List<RssItem> list = RssFeedProvider.parse(string);
23+
RssApplication.list = list;
24+
Intent i = new Intent(NOTIFICATION);
25+
sendBroadcast(i);
26+
}
27+
28+
}

com.example.android.rssfeed/src/com/example/android/rssfeed/RssfeedActivity.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import android.app.Activity;
44
import android.content.Intent;
5+
import android.content.SharedPreferences;
56
import android.os.Bundle;
7+
import android.preference.Preference;
8+
import android.preference.PreferenceManager;
69
import android.view.Menu;
710
import android.view.MenuItem;
811

@@ -19,6 +22,18 @@ public void onCreate(Bundle savedInstanceState) {
1922

2023
setContentView(R.layout.activity_rssfeed);
2124
}
25+
26+
@Override
27+
protected void onRestoreInstanceState(Bundle savedInstanceState) {
28+
// TODO Auto-generated method stub
29+
super.onRestoreInstanceState(savedInstanceState);
30+
}
31+
32+
@Override
33+
protected void onSaveInstanceState(Bundle outState) {
34+
outState.putString("tuet", "hallo");
35+
super.onSaveInstanceState(outState);
36+
}
2237

2338
@Override
2439
public boolean onCreateOptionsMenu(Menu menu) {
@@ -33,6 +48,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
3348
case R.id.action_refresh:
3449
MyListFragment fragment = (MyListFragment) getFragmentManager()
3550
.findFragmentById(R.id.listFragment);
51+
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
52+
String url = preferences.getString("url", "");
3653
fragment.updateListContent();
3754
break;
3855
case R.id.action_settings:
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.example.android.rssfeed.asynctask;
2+
3+
import java.util.List;
4+
5+
import android.app.Activity;
6+
import android.app.ListFragment;
7+
import android.os.AsyncTask;
8+
import android.os.Bundle;
9+
import android.view.View;
10+
import android.widget.ArrayAdapter;
11+
import android.widget.ListView;
12+
13+
import com.example.android.rssfeed.MyAdapter;
14+
import com.example.android.rssfeed.RssApplication;
15+
import com.example.android.rssfeedlibrary.RssFeedProvider;
16+
import com.example.android.rssfeedlibrary.RssItem;
17+
18+
public class MyListFragment extends ListFragment {
19+
private OnItemSelectedListener listener;
20+
ParseTask parseTask;
21+
22+
@Override
23+
public void onCreate(Bundle savedInstanceState) {
24+
super.onCreate(savedInstanceState);
25+
List<RssItem> list = RssApplication.list;
26+
MyAdapter adapter = new MyAdapter(getActivity(),
27+
android.R.layout.simple_list_item_1, list);
28+
setListAdapter(adapter);
29+
// setRetainInstance(true);
30+
}
31+
32+
// @Override
33+
// public View onCreateView(LayoutInflater inflater, ViewGroup container,
34+
// Bundle savedInstanceState) {
35+
// View view = inflater.inflate(R.layout.fragment_rsslist_overview,
36+
// container, false);
37+
//
38+
// return view;
39+
// }
40+
41+
@Override
42+
public void onListItemClick(ListView l, View v, int position, long id) {
43+
RssItem item = (RssItem) getListAdapter().getItem(position);
44+
updateDetail(item);
45+
}
46+
47+
private static class ParseTask extends
48+
AsyncTask<String, Void, List<RssItem>> {
49+
private MyListFragment fragment;
50+
51+
public void setFragment(MyListFragment fragment) {
52+
this.fragment = fragment;
53+
}
54+
55+
@Override
56+
protected List<RssItem> doInBackground(String... params) {
57+
List<RssItem> list = RssFeedProvider.parse(params[0]);
58+
return list;
59+
}
60+
61+
@Override
62+
protected void onPostExecute(List<RssItem> result) {
63+
fragment.setListContent(result);
64+
}
65+
}
66+
67+
public void updateListContent() {
68+
if (parseTask == null) {
69+
parseTask = new ParseTask();
70+
parseTask.setFragment(this);
71+
parseTask.execute("http://www.vogella.com/article.rss");
72+
}
73+
}
74+
75+
public void setListContent(List<RssItem> result) {
76+
ArrayAdapter listAdapter = (ArrayAdapter) getListAdapter();
77+
listAdapter.clear();
78+
listAdapter.addAll(result);
79+
parseTask.setFragment(null);
80+
parseTask = null;
81+
}
82+
83+
public interface OnItemSelectedListener {
84+
public void onRssItemSelected(String link);
85+
}
86+
87+
@Override
88+
public void onAttach(Activity activity) {
89+
super.onAttach(activity);
90+
if (activity instanceof OnItemSelectedListener) {
91+
listener = (OnItemSelectedListener) activity;
92+
} else {
93+
throw new ClassCastException(activity.toString()
94+
+ " must implemenet MyListFragment.OnItemSelectedListener");
95+
}
96+
}
97+
98+
public void updateDetail(RssItem item) {
99+
listener.onRssItemSelected(item.getLink());
100+
}
101+
}

com.example.android.rssfeedlibrary/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@
1111
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
1212

1313
# Project target.
14-
target=android-17
14+
target=android-19
1515
android.library=true

com.vogella.android.service.receiver/AndroidManifest.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
</intent-filter>
2727
</activity>
2828

29-
<service android:name="com.vogella.android.service.receiver.DownloadService" >
29+
<service
30+
android:name="com.vogella.android.service.receiver.DownloadService"
31+
android:process=":testing" >
3032
</service>
3133
</application>
3234

0 commit comments

Comments
 (0)