• R/O
  • SSH
  • HTTPS

picasalife: Commit


Commit MetaInfo

Revisão6 (tree)
Hora2010-10-24 07:23:54
Autortamanegisoul

Mensagem de Log

ダウンロード機能開発中

Mudança Sumário

Diff

--- trunk/AndroidManifest.xml (revision 5)
+++ trunk/AndroidManifest.xml (revision 6)
@@ -8,7 +8,7 @@
88 <application
99 android:icon="@drawable/icon"
1010 android:label="@string/app_name"
11- >
11+ android:debuggable="true">
1212 <activity
1313 android:name=".Main"
1414 android:label="@string/app_name"
--- trunk/src/tamanegisoul/pl/Picasa.java (revision 5)
+++ trunk/src/tamanegisoul/pl/Picasa.java (revision 6)
@@ -6,6 +6,7 @@
66 import java.io.InputStream;
77 import java.io.InputStreamReader;
88 import java.util.ArrayList;
9+import java.util.List;
910
1011 import org.apache.http.HttpResponse;
1112 import org.apache.http.client.ClientProtocolException;
@@ -121,7 +122,7 @@
121122
122123 return new BufferedHttpEntity(response.getEntity()).getContent();
123124 }
124-
125+
125126 public void cache(AlbumInfo albumInfo) {
126127 try {
127128 String url = albumInfo.link + "&fields=entry(title,media:group(media:content))";
--- trunk/src/tamanegisoul/pl/widget/CacheMenuDialogBuilder.java (nonexistent)
+++ trunk/src/tamanegisoul/pl/widget/CacheMenuDialogBuilder.java (revision 6)
@@ -0,0 +1,92 @@
1+package tamanegisoul.pl.widget;
2+
3+import tamanegisoul.pl.AppContext;
4+import tamanegisoul.pl.R;
5+import tamanegisoul.pl.data.AlbumInfo;
6+import android.app.AlertDialog;
7+import android.app.ProgressDialog;
8+import android.content.Context;
9+import android.content.DialogInterface;
10+import android.content.res.Resources;
11+
12+public class CacheMenuDialogBuilder implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener, Runnable {
13+
14+ private Context mContext;
15+ private AlbumInfo mInfo;
16+ private ProgressDialog mProgressDialog;
17+ private int mButtonClicked = AlertDialog.BUTTON_NEUTRAL;
18+
19+ public CacheMenuDialogBuilder(Context context, AlbumInfo info) {
20+ super();
21+ mContext = context;
22+ mInfo = info;
23+ }
24+
25+ public void show() {
26+ Resources r = mContext.getResources();
27+ AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
28+ alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
29+ alertDialog.setTitle(r.getString(R.string.cache_menu));
30+ alertDialog.setMessage(r.getString(R.string.cache_menu_text));
31+ alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, r.getString(R.string.update), this);
32+ alertDialog.setOnDismissListener(this);
33+ alertDialog.show();
34+ }
35+
36+ @Override
37+ public void onClick(DialogInterface dialog, int which) {
38+ mButtonClicked = which;
39+ }
40+
41+ @Override
42+ public void onDismiss(DialogInterface dialog) {
43+ switch (mButtonClicked) {
44+ case DialogInterface.BUTTON_POSITIVE:
45+ mProgressDialog = new ProgressDialog(mContext);
46+ mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
47+ mProgressDialog.setMessage("処理を実行中です...");
48+ mProgressDialog.setCancelable(true);
49+ mProgressDialog.show();
50+ new Thread(this).start();
51+ break;
52+ case DialogInterface.BUTTON_NEGATIVE:
53+
54+ break;
55+ default:
56+ break;
57+ }
58+ }
59+
60+ @Override
61+ public void run() {
62+ AppContext.instance.getPicasa().cache(mInfo);
63+ /*
64+ * このRunnableから↓のコメントアウト行のように直接UIを書き換えようとすると、
65+ * CalledFromWrongThreadException: Only the original thread that created
66+ * a view hierarchy can touch its views.
67+ * で落ちる。(=このRunnableはUIスレッドとは別スレッドで立ち上がっているため)
68+ */
69+ // ((TextView)findViewById(R.id.textProgressDialog)).setText("このUI操作はできません!");
70+
71+ /*
72+ * 3.UIのテキストを変更 UIを書き換える場合はHandlerに処理を渡す (ダイアログ表示してるからあまり必要ない気もする)
73+ *
74+ * 実際に行う処理の結果(ループカウンタ等)を動的にUI側へ渡したい場合
75+ * Handler#sendMessage()にBundleをセットして渡す UIに動的変数(引数)を渡す必要が無い場合
76+ * Handler#post(Runnable r)でも可(今回は省略)
77+ *
78+ * 今回は 上記sleepの間はUIテキストが「これはProgressDialogのテストです」 ダイアログが消えると「HOGEHOGE」
79+ * に書き換わる Message message = new Message(); Bundle bundle = new Bundle();
80+ * bundle.putString("hoge", "HOGEHOGE"); message.setData(bundle);
81+ * handler.sendMessage(message);
82+ */
83+
84+ /*
85+ * 4.実際に行いたい処理が終わったらダイアログを消去 onCreateDialog()を使う場合
86+ * dismissDialog(ID_PROGRESS_DIALOG) progressDialog.show()を使う場合
87+ * progressDialog.dismiss()
88+ */
89+ // dismissDialog(ID_PROGRESS_DIALOG);
90+ mProgressDialog.dismiss();
91+ }
92+}
--- trunk/src/tamanegisoul/pl/CacheUtils.java (revision 5)
+++ trunk/src/tamanegisoul/pl/CacheUtils.java (revision 6)
@@ -1,9 +1,7 @@
11 package tamanegisoul.pl;
22
3-import java.io.BufferedInputStream;
43 import java.io.BufferedOutputStream;
54 import java.io.File;
6-import java.io.FileNotFoundException;
75 import java.io.FileOutputStream;
86 import java.io.IOException;
97 import java.io.InputStream;
@@ -24,8 +22,8 @@
2422 File f = new File(CACHE, albumTitle);
2523 return getSize(f);
2624 }
27-
28- public static void cache(String albumTitle, String title, InputStream in) throws IOException{
25+
26+ public static void cache(String albumTitle, String title, InputStream in) throws IOException {
2927 Bitmap bm = BitmapFactory.decodeStream(in);
3028
3129 Matrix matrix = new Matrix();
@@ -40,10 +38,21 @@
4038 bm.compress(CompressFormat.JPEG, 100, out);
4139 out.flush();
4240 out.close();
43-
44- new MediaScannerConnection(AppContext.instance.getContext(), null).scanFile(f.getAbsolutePath(), "image/jpeg");
41+
42+ // ContentValues values = new ContentValues();
43+ // ContentResolver contentResolver =
44+ // AppContext.instance.getContext().getContentResolver();
45+ // values.put(Images.Media.MIME_TYPE, "image/jpeg");
46+ // values.put(Images.Media.TITLE, title);
47+ // values.put("_data", f.getAbsolutePath());
48+ // contentResolver.insert(Media.EXTERNAL_CONTENT_URI, values);
49+ MediaScannerConnection.scanFile(AppContext.instance.getContext(), new String[] { f.getAbsolutePath() }, null, null);
4550 }
4651
52+ public static void clearCache(String albumTitle) {
53+ deleteFile(new File(CACHE, albumTitle));
54+ }
55+
4756 private static long getSize(File file) {
4857 if (!file.exists()) {
4958 return 0;
@@ -58,4 +67,14 @@
5867 }
5968 }
6069
70+ private static void deleteFile(File file) {
71+ if (file.exists()) {
72+ if (file.isDirectory()) {
73+ for (File f : file.listFiles()) {
74+ deleteFile(f);
75+ }
76+ }
77+ file.delete();
78+ }
79+ }
6180 }
--- trunk/src/tamanegisoul/pl/AppContext.java (revision 5)
+++ trunk/src/tamanegisoul/pl/AppContext.java (revision 6)
@@ -16,7 +16,7 @@
1616 }
1717
1818 public void init(Context context) {
19- Log.d(NAME, "AppContext.init");
19+ Log.d(NAME, String.format("AppContext.init(%s)", context));
2020 this.mContext = context;
2121 }
2222
--- trunk/src/tamanegisoul/pl/action/SynchronizeActivity.java (revision 5)
+++ trunk/src/tamanegisoul/pl/action/SynchronizeActivity.java (revision 6)
@@ -7,14 +7,12 @@
77 import tamanegisoul.pl.R;
88 import tamanegisoul.pl.data.AlbumInfo;
99 import tamanegisoul.pl.widget.AlbumInfoAdapter;
10-import android.app.AlertDialog;
10+import tamanegisoul.pl.widget.CacheMenuDialogBuilder;
1111 import android.app.ListActivity;
12-import android.content.DialogInterface;
1312 import android.os.Bundle;
1413 import android.util.Log;
1514 import android.view.View;
1615 import android.widget.AdapterView;
17-import android.widget.AdapterView.OnItemSelectedListener;
1816
1917 public class SynchronizeActivity extends ListActivity {
2018
@@ -50,26 +48,9 @@
5048 getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
5149 @Override
5250 public void onItemClick(final AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
53- new AlertDialog.Builder(arg0.getContext())
54- .setIcon(android.R.drawable.ic_dialog_alert)
55- .setTitle("YES/NO Dialog")
56- .setMessage("キャッシュを更新 or 削除しますか?")
57- .setPositiveButton("更新", new DialogInterface.OnClickListener() {
58- public void onClick(DialogInterface dialog, int whichButton) {
59- AlbumInfo info = ((AlbumInfoAdapter)arg0.getAdapter()).getItem(arg2);
60- Log.d(AppContext.NAME, String.format("selectedItem: %s", info));
61- AppContext.instance.getPicasa().cache(info);
62- }
63- })
64- .setNeutralButton("削除", new DialogInterface.OnClickListener() {
65- public void onClick(DialogInterface dialog, int whichButton) {
66- }
67- })
68- .setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
69- public void onClick(DialogInterface dialog, int whichButton) {
70- }
71- })
72- .show();
51+ AlbumInfo info = ((AlbumInfoAdapter) arg0.getAdapter()).getItem(arg2);
52+ Log.d(AppContext.NAME, String.format("(%s) item clicked: %s", SynchronizeActivity.class, info));
53+ new CacheMenuDialogBuilder(arg0.getContext(), info).show();
7354 }
7455 });
7556 }
--- trunk/res/values/strings.xml (revision 5)
+++ trunk/res/values/strings.xml (revision 6)
@@ -7,4 +7,9 @@
77 <string name="preference_account">アカウント</string>
88 <string name="not_selected">未選択</string>
99 <string name="nodata">データなし</string>
10+ <string name="cache_menu">キャッシュ操作</string>
11+ <string name="cache_menu_text">キャッシュを更新または削除する</string>
12+ <string name="update">更新</string>
13+ <string name="delete">削除</string>
14+ <string name="cancel">キャンセル</string>
1015 </resources>
Show on old repository browser