/[projects]/android/RescanSdcard/src/dk/thoerup/rescansdcard/RescanMain.java
ViewVC logotype

Contents of /android/RescanSdcard/src/dk/thoerup/rescansdcard/RescanMain.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 784 - (show annotations) (download)
Wed Jun 2 14:19:28 2010 UTC (13 years, 11 months ago) by torben
File size: 4685 byte(s)
Initial import
1 package dk.thoerup.rescansdcard;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import android.app.Activity;
8 import android.app.AlertDialog;
9 import android.content.DialogInterface;
10 import android.media.MediaScannerConnection;
11 import android.media.MediaScannerConnection.MediaScannerConnectionClient;
12 import android.net.Uri;
13 import android.os.AsyncTask;
14 import android.os.Bundle;
15 import android.os.Environment;
16 import android.os.Handler;
17 import android.os.Message;
18 import android.util.Log;
19 import android.view.View;
20 import android.view.View.OnClickListener;
21 import android.widget.Button;
22 import android.widget.ProgressBar;
23 import android.widget.Spinner;
24 import android.widget.TextView;
25
26 public class RescanMain extends Activity {
27 final static String TAG = "RescanSdcard";
28
29
30 Button scanBtn;
31 TextView totalTv;
32 TextView processedTv;
33 Spinner targetSpinner;
34
35 ProgressBar progress;
36
37 MediaScannerConnection scan;
38
39 int total = 0;
40
41 int processed = 0;
42
43
44 /** Called when the activity is first created. */
45 @Override
46 public void onCreate(Bundle savedInstanceState) {
47 super.onCreate(savedInstanceState);
48 Log.i(TAG, "onCreate");
49
50 setContentView(R.layout.main);
51 scanBtn = (Button) findViewById(R.id.scan);
52 scanBtn.setOnClickListener( new ScanListener() );
53
54 totalTv = (TextView) findViewById(R.id.total);
55 processedTv = (TextView) findViewById(R.id.processed);
56
57 targetSpinner = (Spinner) findViewById(R.id.target);
58 progress = (ProgressBar) findViewById(R.id.progress);
59
60
61 checkSdCard();
62 }
63
64 void populateSpinner() {
65
66 }
67
68 boolean checkSdCard() {
69 //check whether sdcard is mounted
70 if ( ! Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ) {
71 AlertDialog.Builder b = new AlertDialog.Builder(this);
72
73 b.setMessage("SD-card is not currently mounted");
74 b.setPositiveButton("ok", new DialogInterface.OnClickListener() {
75 @Override
76 public void onClick(DialogInterface dialog, int which) {
77 RescanMain.this.finish();
78 }
79 });
80 b.show();
81 return false;
82 } else {
83 return true;
84 }
85 }
86
87
88 Handler updateHandler = new Handler() {
89 @Override
90 public void handleMessage(Message msg) {
91 super.handleMessage(msg);
92
93 totalTv.setText("" + total);
94 processedTv.setText("" + processed);
95
96 progress.setMax(total);
97 progress.setProgress(processed);
98
99 if (processed == total) {
100 scanBtn.setEnabled(true);
101 targetSpinner.setEnabled(true);
102 }
103 }
104 };
105
106
107 void findFilesRecursive(String path, List<String> files) {
108 Log.i(TAG, "scanRecursive " + path);
109
110 File dir = new File(path);
111
112 String entries[] = dir.list();
113
114 File nomedia = new File(dir.getPath() + "/.nomedia" );
115 if (nomedia.exists()) {
116 Log.e(TAG, nomedia.getPath() + " exists, ignoring folder");
117 return;
118 }
119
120
121 for (String entry : entries) {
122
123 if (entry.charAt(0) == '.') {
124 Log.e(TAG, "ignore " + entry);
125 continue;
126 }
127
128 File current = new File(dir.getPath() + "/" + entry);
129 //Log.v(TAG, current.getPath());
130
131
132 if (current.isDirectory()) {
133 findFilesRecursive(current.getPath(), files);
134 } else {
135 files.add(current.getPath());
136 }
137 }
138 }
139
140 class FileEnqueuer extends AsyncTask<Void, Void, Void> {
141
142 @Override
143 protected Void doInBackground(Void... arg0) {
144
145 List<String> files = new ArrayList<String>();
146
147 findFilesRecursive(Environment.getExternalStorageDirectory().getPath(), files);
148
149
150 total = files.size();
151 for (String f : files) {
152 scan.scanFile(f, null);
153 }
154
155 scan.disconnect();
156 scan = null;
157
158 files.clear();
159
160 return null;
161 }
162
163 }
164
165
166 class ScanListener implements OnClickListener {
167 @Override
168 public void onClick(View arg0) {
169 if (checkSdCard() == true) {
170 total = 0;
171 processed = 0;
172
173 scan = new MediaScannerConnection(RescanMain.this, new ScannerClient() );
174 scan.connect();
175
176 scanBtn.setEnabled(false);
177 targetSpinner.setEnabled(false);
178 }
179 }
180 }
181
182 class ScannerClient implements MediaScannerConnectionClient {
183
184 @Override
185 public void onMediaScannerConnected() {
186 Log.i(TAG, "scannerConnected");
187
188 new FileEnqueuer().execute();
189 }
190
191 @Override
192 public void onScanCompleted(String path, Uri uri) {
193 //Log.v(TAG, "scanCompleted " + path + " " + uri);
194 processed++;
195 updateHandler.sendEmptyMessage(0);
196 }
197 }
198 }

  ViewVC Help
Powered by ViewVC 1.1.20