Skip to content

Commit 5652cf1

Browse files
committed
Refactored the selection of the background image to work in the
Preferences. Preferences are persisted and can be accessed by AndroidZenWriterActivity.
1 parent 5c7938e commit 5652cf1

File tree

5 files changed

+167
-102
lines changed

5 files changed

+167
-102
lines changed

res/layout/thememanager.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@
33
android:layout_width="match_parent"
44
android:layout_height="match_parent" >
55

6-
<Button
7-
android:id="@+id/SelectBackgroundButton"
8-
android:layout_width="wrap_content"
9-
android:layout_height="wrap_content"
10-
android:layout_alignParentBottom="true"
11-
android:layout_alignParentRight="true"
12-
android:text="@string/select_background_image" />
13-
146
<Button
157
android:id="@+id/themeprefsbutton"
168
android:layout_width="wrap_content"

res/xml/zenpreferences.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
android:title="Display" >
99
<Preference
1010
android:key="backgroundpref"
11-
android:title="Background Image" />
11+
android:title="Background Image"
12+
/>
1213

1314
<EditTextPreference
1415
android:key="marginpref"

src/com/javaposse/android/zenwriter/AndroidZenWriterActivity.java

Lines changed: 39 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
import java.io.FileOutputStream;
77
import java.io.IOException;
88
import java.io.InputStreamReader;
9-
import java.nio.channels.FileChannel;
109
import java.util.Date;
10+
import java.util.Map;
1111
import java.util.Properties;
1212

1313
import android.app.Activity;
14+
import android.content.Context;
1415
import android.content.Intent;
15-
import android.database.Cursor;
16+
import android.content.SharedPreferences;
1617
import android.graphics.Bitmap;
1718
import android.graphics.BitmapFactory;
1819
import android.graphics.drawable.BitmapDrawable;
1920
import android.graphics.drawable.Drawable;
20-
import android.net.Uri;
2121
import android.os.Bundle;
22-
import android.provider.MediaStore;
22+
import android.preference.PreferenceManager;
2323
import android.support.v4.view.ViewPager;
2424
import android.util.DisplayMetrics;
2525
import android.util.Log;
@@ -32,99 +32,27 @@ public class AndroidZenWriterActivity extends Activity {
3232
public static String currentFilename = "current.txt";
3333
public static String settingsFilename = "settings.properties";
3434

35-
Properties settings = new Properties();
36-
3735
public static final int SELECT_PHOTO = 100;
3836

3937
/** Called when the activity is first created. */
4038
@Override
4139
public void onCreate(Bundle savedInstanceState) {
4240
super.onCreate(savedInstanceState);
43-
loadSettings();
41+
//loadSettings();
4442
setContentView(R.layout.main);
4543
ViewPager pager = (ViewPager) findViewById(R.id.ViewPager1);
4644
pager.setAdapter(new ZenAdapter(this));
4745
pager.setCurrentItem(1, true);
48-
View top = findViewById(R.id.Top);
49-
if(settings.containsKey("backgroundImage")) {
50-
Drawable background = getDrawable(settings.getProperty("backgroundImage"));
51-
if(background != null) {
52-
top.setBackgroundDrawable(background);
53-
}
54-
}
46+
47+
applyPreferences();
48+
5549
}
5650

57-
protected void onActivityResult(int requestCode, int resultCode,
58-
Intent imageReturnedIntent) {
59-
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
60-
61-
switch (requestCode) {
62-
case SELECT_PHOTO:
63-
if (resultCode == RESULT_OK) {
64-
Uri selectedImage = imageReturnedIntent.getData();
65-
66-
Log.i("SelectedImage", selectedImage.toString());
67-
View top = findViewById(R.id.Top);
68-
String path = getPath(selectedImage);
69-
Log.i("SelectedImage", "File Path: " + path);
70-
File selectedImageFile = new File(path);
71-
72-
try {
73-
74-
File destFile = getFileStreamPath(selectedImageFile
75-
.getName());
76-
77-
if (!destFile.exists() && selectedImageFile.exists()) {
78-
Log.i("SelectedImage", "Copying file: "
79-
+ selectedImageFile.getAbsolutePath());
80-
FileChannel src = new FileInputStream(selectedImageFile)
81-
.getChannel();
82-
FileChannel dst = openFileOutput(
83-
selectedImageFile.getName(), MODE_PRIVATE)
84-
.getChannel();
85-
dst.transferFrom(src, 0, src.size());
86-
src.close();
87-
dst.close();
88-
Log.i("SelectedImage", "Copy Complete!");
89-
Log.i("SelectedImage",
90-
"Destination File: "
91-
+ destFile.getAbsolutePath());
92-
} else {
93-
Log.i("SelectedImage",
94-
"The file was already in our private storage: "
95-
+ destFile.getAbsolutePath());
96-
}
97-
Toast.makeText(this,
98-
"Copied image: " + selectedImageFile.getName(),
99-
Toast.LENGTH_LONG).show();
100-
} catch (Exception e) {
101-
Log.e("SelectedImage", "Failed to Copy Image", e);
102-
}
103-
104-
Drawable drawable = getDrawable(selectedImageFile.getName());
105-
if (drawable != null) {
106-
top.setBackgroundDrawable(drawable);
107-
settings.put("backgroundImage", selectedImageFile.getName());
108-
saveSettings();
109-
}
110-
111-
}
112-
}
113-
}
114-
115-
public String getPath(Uri uri) {
116-
String[] projection = { MediaStore.Images.Media.DATA };
117-
Cursor cursor = managedQuery(uri, projection, null, null, null);
118-
startManagingCursor(cursor);
119-
int column_index = cursor
120-
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
121-
cursor.moveToFirst();
122-
return cursor.getString(column_index);
123-
}
51+
public static final int EDIT_PREFERENCES = 1;
12452

12553
public void openThemeSettings(View parent) {
12654
Intent settingsActivity = new Intent(this, PrefsActivity.class);
127-
startActivity(settingsActivity);
55+
startActivityForResult(settingsActivity, EDIT_PREFERENCES);
12856
}
12957

13058
@Override
@@ -136,7 +64,7 @@ protected void onPause() {
13664
@Override
13765
protected void onDestroy() {
13866
super.onDestroy();
139-
saveSettings();
67+
//saveSettings();
14068
saveFile(currentFilename);
14169
}
14270

@@ -196,7 +124,31 @@ protected void loadFile(String filename) {
196124
}
197125

198126
}
199-
127+
128+
129+
protected void applyPreferences() {
130+
View top = findViewById(R.id.Top);
131+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
132+
String backgroundImage = prefs.getString("backgroundpref", "");
133+
Log.i("AndroidZenWriter:applyPreferences", "BackgroundImage: " + backgroundImage);
134+
if(!backgroundImage.equals("")) {
135+
Drawable background = getDrawable(this, backgroundImage);
136+
if(background != null) {
137+
top.setBackgroundDrawable(background);
138+
}
139+
}
140+
// TODO: Apply other preferences
141+
}
142+
143+
protected void onActivityResult(int requestCode, int resultCode,
144+
Intent intent) {
145+
super.onActivityResult(requestCode, resultCode, intent);
146+
if(requestCode == EDIT_PREFERENCES && resultCode == RESULT_OK) {
147+
this.applyPreferences();
148+
}
149+
150+
}
151+
/*
200152
public void saveSettings() {
201153
FileOutputStream fos = null;
202154
@@ -237,16 +189,13 @@ public void loadSettings() {
237189
}
238190
Toast.makeText(this, "Loaded settings", Toast.LENGTH_LONG).show();
239191
}
240-
241-
public Drawable getDrawable(String filename) {
192+
*/
193+
public static Drawable getDrawable(Context context, String filename) {
242194

243195
BitmapFactory.Options opts = new BitmapFactory.Options();
244-
DisplayMetrics metrics = new DisplayMetrics();
245-
getWindowManager().getDefaultDisplay().getMetrics(metrics);
246-
opts.inTargetDensity = metrics.densityDpi;
247196
opts.inSampleSize = 2;
248197
Bitmap backgroundBitmap = BitmapFactory.decodeFile(
249-
getFileStreamPath(filename).getAbsolutePath(), opts);
198+
context.getFileStreamPath(filename).getAbsolutePath(), opts);
250199

251200
if (backgroundBitmap != null) {
252201
BitmapDrawable drawable = new BitmapDrawable(backgroundBitmap);
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,139 @@
11
package com.javaposse.android.zenwriter;
22

3+
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.nio.channels.FileChannel;
6+
import java.util.Map;
7+
8+
import android.content.Intent;
9+
import android.content.SharedPreferences;
10+
import android.database.Cursor;
11+
import android.graphics.Bitmap;
12+
import android.graphics.BitmapFactory;
13+
import android.graphics.drawable.BitmapDrawable;
14+
import android.graphics.drawable.Drawable;
15+
import android.net.Uri;
316
import android.os.Bundle;
17+
import android.preference.Preference;
18+
import android.preference.PreferenceManager;
19+
import android.preference.Preference.OnPreferenceClickListener;
420
import android.preference.PreferenceActivity;
21+
import android.provider.MediaStore;
22+
import android.util.DisplayMetrics;
23+
import android.util.Log;
24+
import android.view.View;
25+
import android.widget.Toast;
526

627
public class PrefsActivity extends PreferenceActivity {
28+
29+
public static final int SELECT_PHOTO = 100;
30+
731
@Override
832
protected void onCreate(Bundle savedInstanceState) {
933
// TODO Auto-generated method stub
1034
super.onCreate(savedInstanceState);
1135
addPreferencesFromResource(R.xml.zenpreferences);
36+
Preference backgroundPref = this.findPreference("backgroundpref");
37+
final PrefsActivity THIS = this;
38+
backgroundPref
39+
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
40+
@Override
41+
public boolean onPreferenceClick(Preference preference) {
42+
return THIS.selectBackgroundImage(preference);
43+
}
44+
});
45+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
46+
Map<String, Object> prefValues = (Map<String, Object>) prefs.getAll();
47+
for(Map.Entry<String, Object> e : prefValues.entrySet()) {
48+
Log.i("PrefsActivity:OnCreate", "Pref: " + e.getKey() + " = " + e.getValue());
49+
}
50+
backgroundPref.setSummary(prefs.getString("backgroundpref", ""));
51+
}
52+
53+
public boolean selectBackgroundImage(Preference pref) {
54+
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
55+
photoPickerIntent.setType("image/*");
56+
this.startActivityForResult(photoPickerIntent,
57+
AndroidZenWriterActivity.SELECT_PHOTO);
58+
return true;
59+
}
60+
61+
protected void onActivityResult(int requestCode, int resultCode,
62+
Intent imageReturnedIntent) {
63+
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
64+
65+
switch (requestCode) {
66+
case SELECT_PHOTO:
67+
if (resultCode == RESULT_OK) {
68+
Uri selectedImage = imageReturnedIntent.getData();
69+
70+
Log.i("SelectedImage", selectedImage.toString());
71+
String path = getPath(selectedImage);
72+
Log.i("SelectedImage", "File Path: " + path);
73+
File selectedImageFile = new File(path);
74+
75+
try {
76+
77+
File destFile = getFileStreamPath(selectedImageFile
78+
.getName());
79+
80+
if (!destFile.exists() && selectedImageFile.exists()) {
81+
Log.i("SelectedImage", "Copying file: "
82+
+ selectedImageFile.getAbsolutePath());
83+
84+
Toast.makeText(this,
85+
"Copying image: " + selectedImageFile.getName(),
86+
Toast.LENGTH_LONG).show();
87+
FileChannel src = new FileInputStream(selectedImageFile)
88+
.getChannel();
89+
FileChannel dst = openFileOutput(
90+
selectedImageFile.getName(), MODE_PRIVATE)
91+
.getChannel();
92+
dst.transferFrom(src, 0, src.size());
93+
src.close();
94+
dst.close();
95+
Log.i("SelectedImage", "Copy Complete!");
96+
Log.i("SelectedImage",
97+
"Destination File: "
98+
+ destFile.getAbsolutePath());
99+
} else {
100+
Log.i("SelectedImage",
101+
"The file was already in our private storage: "
102+
+ destFile.getAbsolutePath());
103+
}
104+
Toast.makeText(this,
105+
"Copied image: " + selectedImageFile.getName(),
106+
Toast.LENGTH_LONG).show();
107+
} catch (Exception e) {
108+
Log.e("SelectedImage", "Failed to Copy Image", e);
109+
}
110+
111+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
112+
SharedPreferences.Editor editor = prefs.edit();
113+
editor.putString("backgroundpref", selectedImageFile.getName());
114+
editor.commit();
115+
Preference backgroundPref = this.findPreference("backgroundpref");
116+
backgroundPref.setSummary(selectedImageFile.getName());
117+
}
118+
}
119+
}
120+
121+
public String getPath(Uri uri) {
122+
String[] projection = { MediaStore.Images.Media.DATA };
123+
Cursor cursor = managedQuery(uri, projection, null, null, null);
124+
startManagingCursor(cursor);
125+
int column_index = cursor
126+
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
127+
cursor.moveToFirst();
128+
return cursor.getString(column_index);
12129
}
130+
131+
132+
@Override
133+
protected void onPause() {
134+
super.onPause();
135+
Log.i("PrefsActivity", "Paused, setting result.");
136+
setResult(RESULT_OK);
137+
}
138+
13139
}

src/com/javaposse/android/zenwriter/ZenAdapter.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@ public Object instantiateItem(ViewGroup container, int position) {
4040
break;
4141
case 2:
4242
view = inflater.inflate(R.layout.thememanager, null);
43-
Button btn = (Button) view
44-
.findViewById(R.id.SelectBackgroundButton);
45-
btn.setOnClickListener(new SelectImageListener(context));
4643
break;
4744
case 0:
4845
default:

0 commit comments

Comments
 (0)