| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 package org.adblockplus.android; | 1 package org.adblockplus.android; |
| 2 | 2 |
| 3 import java.io.IOException; | 3 import java.io.IOException; |
| 4 import java.io.InputStream; | 4 import java.io.InputStream; |
| 5 import java.io.OutputStream; | 5 import java.io.OutputStream; |
| 6 import java.util.Calendar; | 6 import java.util.Calendar; |
| 7 import java.util.Date; | 7 import java.util.Date; |
| 8 import java.util.List; | 8 import java.util.List; |
| 9 | 9 |
| 10 import android.app.ActivityManager; | 10 import android.app.ActivityManager; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 import android.view.MenuItem; | 31 import android.view.MenuItem; |
| 32 import android.view.View; | 32 import android.view.View; |
| 33 import android.view.Window; | 33 import android.view.Window; |
| 34 import android.widget.TextView; | 34 import android.widget.TextView; |
| 35 | 35 |
| 36 /** | 36 /** |
| 37 * Main settings UI. | 37 * Main settings UI. |
| 38 */ | 38 */ |
| 39 public class Preferences extends SummarizedPreferences | 39 public class Preferences extends SummarizedPreferences |
| 40 { | 40 { |
| 41 private final static String TAG = "Preferences"; | 41 private static final String TAG = "Preferences"; |
|
Felix Dahlke
2012/10/09 14:27:29
As in AdvancedPreferences, "static final"?
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 42 | 42 |
| 43 private AboutDialog aboutDialog; | 43 private AboutDialog aboutDialog; |
| 44 private boolean showAbout = false; | 44 private boolean showAbout = false; |
| 45 private String configurationMsg; | 45 private String configurationMsg; |
| 46 private String subscriptionSummary; | 46 private String subscriptionSummary; |
| 47 | 47 |
| 48 @Override | 48 @Override |
| 49 public void onCreate(Bundle savedInstanceState) | 49 public void onCreate(Bundle savedInstanceState) |
| 50 { | 50 { |
| 51 requestWindowFeature(Window.FEATURE_NO_TITLE); | 51 requestWindowFeature(Window.FEATURE_NO_TITLE); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 67 if (lastVersion != thisVersion) | 67 if (lastVersion != thisVersion) |
| 68 { | 68 { |
| 69 copyAssets(); | 69 copyAssets(); |
| 70 SharedPreferences.Editor editor = prefs.edit(); | 70 SharedPreferences.Editor editor = prefs.edit(); |
| 71 editor.putInt(getString(R.string.pref_version), thisVersion); | 71 editor.putInt(getString(R.string.pref_version), thisVersion); |
| 72 editor.commit(); | 72 editor.commit(); |
| 73 } | 73 } |
| 74 } | 74 } |
| 75 catch (NameNotFoundException e) | 75 catch (NameNotFoundException e) |
| 76 { | 76 { |
| 77 copyAssets(); | 77 copyAssets(); |
|
Felix Dahlke
2012/10/09 14:27:29
Why can this getPackageInfo fail while those in Ab
Andrey Novikov
2012/10/12 13:19:14
It can not. But I prefer to be reinsured in this c
| |
| 78 } | 78 } |
| 79 } | 79 } |
| 80 | 80 |
| 81 @Override | 81 @Override |
| 82 protected void onStart() | 82 protected void onStart() |
| 83 { | 83 { |
| 84 super.onStart(); | 84 super.onStart(); |
| 85 AdblockPlus application = AdblockPlus.getApplication(); | 85 AdblockPlus application = AdblockPlus.getApplication(); |
| 86 application.startEngine(); | 86 application.startEngine(); |
| 87 application.startInteractive(); | 87 application.startInteractive(); |
| 88 } | 88 } |
| 89 | 89 |
| 90 @Override | 90 @Override |
| 91 public void onResume() | 91 public void onResume() |
|
Felix Dahlke
2012/10/09 14:27:29
Another long method, same comment as for AdvancedP
Andrey Novikov
2012/10/12 13:19:14
Same comment :) See code comments - they are for y
| |
| 92 { | 92 { |
| 93 super.onResume(); | 93 super.onResume(); |
| 94 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this ); | 94 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this ); |
| 95 | 95 |
| 96 final AdblockPlus application = AdblockPlus.getApplication(); | 96 final AdblockPlus application = AdblockPlus.getApplication(); |
| 97 | 97 |
| 98 // Construct subscription list | 98 // Construct subscription list |
| 99 RefreshableListPreference subscriptionList = (RefreshableListPreference) fin dPreference(getString(R.string.pref_subscription)); | 99 RefreshableListPreference subscriptionList = (RefreshableListPreference) fin dPreference(getString(R.string.pref_subscription)); |
| 100 List<Subscription> subscriptions = application.getSubscriptions(); | 100 List<Subscription> subscriptions = application.getSubscriptions(); |
| 101 String[] entries = new String[subscriptions.size()]; | 101 String[] entries = new String[subscriptions.size()]; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 122 if (offer != null) | 122 if (offer != null) |
| 123 { | 123 { |
| 124 subscriptionList.setValue(offer.url); | 124 subscriptionList.setValue(offer.url); |
| 125 application.setSubscription(offer); | 125 application.setSubscription(offer); |
| 126 new AlertDialog.Builder(this).setTitle(R.string.app_name).setMessage(Str ing.format(getString(R.string.msg_subscription_offer, offer.title))).setIcon(and roid.R.drawable.ic_dialog_info) | 126 new AlertDialog.Builder(this).setTitle(R.string.app_name).setMessage(Str ing.format(getString(R.string.msg_subscription_offer, offer.title))).setIcon(and roid.R.drawable.ic_dialog_info) |
| 127 .setPositiveButton(R.string.ok, null).create().show(); | 127 .setPositiveButton(R.string.ok, null).create().show(); |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 | 130 |
| 131 // Enable manual subscription refresh | 131 // Enable manual subscription refresh |
| 132 subscriptionList.setOnRefreshClickListener(new View.OnClickListener() { | 132 subscriptionList.setOnRefreshClickListener(new View.OnClickListener() |
|
Felix Dahlke
2012/10/09 14:27:29
Brace on its own line please.
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 133 { | |
| 133 @Override | 134 @Override |
| 134 public void onClick(View v) | 135 public void onClick(View v) |
| 135 { | 136 { |
| 136 application.refreshSubscription(); | 137 application.refreshSubscription(); |
| 137 } | 138 } |
| 138 }); | 139 }); |
| 139 | 140 |
| 140 // Set subscription status message | 141 // Set subscription status message |
| 141 if (subscriptionSummary != null) | 142 if (subscriptionSummary != null) |
| 142 subscriptionList.setSummary(subscriptionSummary); | 143 subscriptionList.setSummary(subscriptionSummary); |
| 143 else | 144 else |
| 144 setPrefSummary(subscriptionList); | 145 setPrefSummary(subscriptionList); |
| 145 | 146 |
| 146 // Time to start listening for events | 147 // Time to start listening for events |
| 147 registerReceiver(receiver, new IntentFilter(AdblockPlus.BROADCAST_SUBSCRIPTI ON_STATUS)); | 148 registerReceiver(receiver, new IntentFilter(AdblockPlus.BROADCAST_SUBSCRIPTI ON_STATUS)); |
| 148 registerReceiver(receiver, new IntentFilter(AdblockPlus.BROADCAST_FILTER_MAT CHES)); | 149 registerReceiver(receiver, new IntentFilter(AdblockPlus.BROADCAST_FILTER_MAT CHES)); |
| 149 registerReceiver(receiver, new IntentFilter(ProxyService.BROADCAST_STATE_CHA NGED)); | 150 registerReceiver(receiver, new IntentFilter(ProxyService.BROADCAST_STATE_CHA NGED)); |
| 150 registerReceiver(receiver, new IntentFilter(ProxyService.BROADCAST_PROXY_FAI LED)); | 151 registerReceiver(receiver, new IntentFilter(ProxyService.BROADCAST_PROXY_FAI LED)); |
| 151 | 152 |
| 152 final String url = current; | 153 final String url = current; |
| 153 | 154 |
| 154 // Initialize subscription verification | 155 // Initialize subscription verification |
| 155 (new Thread() { | 156 (new Thread() |
|
Felix Dahlke
2012/10/09 14:27:29
Brace on its own line please.
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 157 { | |
| 156 @Override | 158 @Override |
| 157 public void run() | 159 public void run() |
| 158 { | 160 { |
| 159 if (!application.verifySubscriptions()) | 161 if (!application.verifySubscriptions()) |
| 160 { | 162 { |
| 161 Subscription subscription = application.getSubscription(url); | 163 Subscription subscription = application.getSubscription(url); |
| 162 application.setSubscription(subscription); | 164 application.setSubscription(subscription); |
| 163 } | 165 } |
| 164 } | 166 } |
| 165 }).start(); | 167 }).start(); |
| 166 | 168 |
| 167 // Check if service is running and update UI accordingly | 169 // Check if service is running and update UI accordingly |
| 168 boolean enabled = prefs.getBoolean(getString(R.string.pref_enabled), false); | 170 boolean enabled = prefs.getBoolean(getString(R.string.pref_enabled), false); |
| 169 if (enabled && !isServiceRunning()) | 171 if (enabled && !isServiceRunning()) |
| 170 { | 172 { |
| 171 setEnabled(false); | 173 setEnabled(false); |
| 172 enabled = false; | |
|
Felix Dahlke
2012/10/09 14:27:29
enabled isn't read past this point, Setting it to
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 173 } | 174 } |
| 174 // Run service if this is first application run | 175 // Run service if this is first application run |
| 175 else if (!enabled && firstRun) | 176 else if (!enabled && firstRun) |
| 176 { | 177 { |
| 177 startService(new Intent(this, ProxyService.class)); | 178 startService(new Intent(this, ProxyService.class)); |
| 178 setEnabled(true); | 179 setEnabled(true); |
| 179 } | 180 } |
| 180 | 181 |
| 181 // Process screen rotation | 182 // Process screen rotation |
| 182 if (configurationMsg != null) | 183 if (configurationMsg != null) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 private void copyAssets() | 261 private void copyAssets() |
| 261 { | 262 { |
| 262 AssetManager assetManager = getAssets(); | 263 AssetManager assetManager = getAssets(); |
| 263 String[] files = null; | 264 String[] files = null; |
| 264 try | 265 try |
| 265 { | 266 { |
| 266 files = assetManager.list("install"); | 267 files = assetManager.list("install"); |
| 267 } | 268 } |
| 268 catch (IOException e) | 269 catch (IOException e) |
| 269 { | 270 { |
| 270 Log.e(TAG, e.getMessage()); | 271 Log.e(TAG, "Failed to get assets list", e); |
|
Felix Dahlke
2012/10/09 14:27:29
Why not pass e as the third parameter, like below?
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 271 } | 272 } |
| 272 for (int i = 0; i < files.length; i++) | 273 for (int i = 0; i < files.length; i++) |
| 273 { | 274 { |
| 274 InputStream in = null; | |
|
Felix Dahlke
2012/10/09 14:27:29
in and out can be declared in the try block, they
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 275 OutputStream out = null; | |
| 276 try | 275 try |
| 277 { | 276 { |
| 278 Log.d(TAG, "Copy: install/" + files[i]); | 277 Log.d(TAG, "Copy: install/" + files[i]); |
| 279 in = assetManager.open("install/" + files[i]); | 278 InputStream in = assetManager.open("install/" + files[i]); |
| 280 out = openFileOutput(files[i], MODE_PRIVATE); | 279 OutputStream out = openFileOutput(files[i], MODE_PRIVATE); |
| 281 byte[] buffer = new byte[1024]; | 280 byte[] buffer = new byte[1024]; |
| 282 int read; | 281 int read; |
| 283 while ((read = in.read(buffer)) != -1) | 282 while ((read = in.read(buffer)) != -1) |
| 284 { | 283 { |
| 285 out.write(buffer, 0, read); | 284 out.write(buffer, 0, read); |
| 286 } | 285 } |
| 287 in.close(); | 286 in.close(); |
| 288 in = null; | |
|
Felix Dahlke
2012/10/09 14:27:29
You don't need to set in/out to null, they aren't
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 289 out.flush(); | 287 out.flush(); |
| 290 out.close(); | 288 out.close(); |
| 291 out = null; | |
| 292 | |
| 293 } | 289 } |
| 294 catch (Exception e) | 290 catch (Exception e) |
| 295 { | 291 { |
| 296 Log.e(TAG, "Asset copy error", e); | 292 Log.e(TAG, "Asset copy error", e); |
| 297 } | 293 } |
| 298 } | 294 } |
| 299 } | 295 } |
| 300 | 296 |
| 301 /** | 297 /** |
| 302 * Redirects user to configuration URL. | 298 * Redirects user to configuration URL. |
| 303 */ | 299 */ |
| 304 public void onHelp(View view) | 300 public void onHelp(View view) |
| 305 { | 301 { |
| 306 Uri uri = Uri.parse(getString(R.string.configuring_url)); | 302 Uri uri = Uri.parse(getString(R.string.configuring_url)); |
| 307 final Intent intent = new Intent(Intent.ACTION_VIEW, uri); | 303 Intent intent = new Intent(Intent.ACTION_VIEW, uri); |
|
Felix Dahlke
2012/10/09 14:27:29
Why make intent final?
Andrey Novikov
2012/10/12 13:19:14
No reason, just copied url opening code from sampl
| |
| 308 startActivity(intent); | 304 startActivity(intent); |
| 309 } | 305 } |
| 310 | 306 |
| 311 /** | 307 /** |
| 312 * Shows about dialog. | 308 * Shows about dialog. |
| 313 */ | 309 */ |
| 314 public void onAbout(View view) | 310 public void onAbout(View view) |
| 315 { | 311 { |
| 316 aboutDialog = new AboutDialog(this); | 312 aboutDialog = new AboutDialog(this); |
| 317 aboutDialog.setOnDismissListener(new OnDismissListener() { | 313 aboutDialog.setOnDismissListener(new OnDismissListener() |
| 314 { | |
| 318 | 315 |
| 319 @Override | 316 @Override |
| 320 public void onDismiss(DialogInterface dialog) | 317 public void onDismiss(DialogInterface dialog) |
| 321 { | 318 { |
| 322 showAbout = false; | 319 showAbout = false; |
|
Felix Dahlke
2012/10/09 14:27:29
Naming nit pick: This sounds imperative, how about
Andrey Novikov
2012/10/12 13:19:14
For me name is correct - it flags if have to show
| |
| 323 aboutDialog = null; | 320 aboutDialog = null; |
| 324 } | 321 } |
| 325 }); | 322 }); |
| 326 showAbout = true; | 323 showAbout = true; |
| 327 aboutDialog.show(); | 324 aboutDialog.show(); |
| 328 } | 325 } |
| 329 | 326 |
| 330 @Override | 327 @Override |
| 331 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Str ing key) | 328 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Str ing key) |
| 332 { | 329 { |
| 333 if (getString(R.string.pref_enabled).equals(key)) | 330 if (getString(R.string.pref_enabled).equals(key)) |
| 334 { | 331 { |
| 335 boolean enabled = sharedPreferences.getBoolean(key, false); | 332 boolean enabled = sharedPreferences.getBoolean(key, false); |
| 336 if (enabled && !isServiceRunning()) | 333 boolean serviceRunning = isServiceRunning(); |
| 334 if (enabled && !serviceRunning) | |
| 337 startService(new Intent(this, ProxyService.class)); | 335 startService(new Intent(this, ProxyService.class)); |
| 338 else if (!enabled && isServiceRunning()) | 336 else if (!enabled && serviceRunning) |
|
Felix Dahlke
2012/10/09 14:27:29
I'd feel safer is isServiceRunning() was called ju
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 339 stopService(new Intent(this, ProxyService.class)); | 337 stopService(new Intent(this, ProxyService.class)); |
| 340 } | 338 } |
| 341 if (getString(R.string.pref_subscription).equals(key)) | 339 if (getString(R.string.pref_subscription).equals(key)) |
| 342 { | 340 { |
| 343 String current = sharedPreferences.getString(key, null); | 341 String current = sharedPreferences.getString(key, null); |
| 344 AdblockPlus application = AdblockPlus.getApplication(); | 342 AdblockPlus application = AdblockPlus.getApplication(); |
| 345 Subscription subscription = application.getSubscription(current); | 343 Subscription subscription = application.getSubscription(current); |
| 346 application.setSubscription(subscription); | 344 application.setSubscription(subscription); |
| 347 } | 345 } |
| 348 super.onSharedPreferenceChanged(sharedPreferences, key); | 346 super.onSharedPreferenceChanged(sharedPreferences, key); |
| 349 } | 347 } |
| 350 | 348 |
| 351 private void showConfigurationMsg(String message) | 349 private void showConfigurationMsg(String message) |
| 352 { | 350 { |
| 353 TextView msg = (TextView) findViewById(R.id.txt_configuration); | 351 TextView msg = (TextView) findViewById(R.id.txt_configuration); |
| 354 msg.setText(message); | 352 msg.setText(message); |
| 355 msg.setVisibility(View.VISIBLE); | 353 msg.setVisibility(View.VISIBLE); |
| 356 configurationMsg = message; | 354 configurationMsg = message; |
| 357 } | 355 } |
| 358 | 356 |
| 359 private void hideConfigurationMsg() | 357 private void hideConfigurationMsg() |
| 360 { | 358 { |
| 361 if (configurationMsg == null) | 359 if (configurationMsg == null) |
| 362 return; | 360 return; |
| 363 TextView msg = (TextView) findViewById(R.id.txt_configuration); | 361 TextView msg = (TextView) findViewById(R.id.txt_configuration); |
| 364 msg.setVisibility(View.GONE); | 362 msg.setVisibility(View.GONE); |
| 365 configurationMsg = null; | 363 configurationMsg = null; |
| 366 } | 364 } |
| 367 | 365 |
| 368 private BroadcastReceiver receiver = new BroadcastReceiver() { | 366 private BroadcastReceiver receiver = new BroadcastReceiver() |
|
Felix Dahlke
2012/10/09 14:27:29
Brace on a new line please.
Andrey Novikov
2012/10/12 13:19:14
Done.
| |
| 367 { | |
| 369 @Override | 368 @Override |
| 370 public void onReceive(final Context context, Intent intent) | 369 public void onReceive(Context context, Intent intent) |
|
Felix Dahlke
2012/10/09 14:27:29
Why make context final?
Andrey Novikov
2012/10/12 13:19:14
It was previously used in a new thread, fixed.
| |
| 371 { | 370 { |
| 372 String action = intent.getAction(); | 371 String action = intent.getAction(); |
| 373 Bundle extra = intent.getExtras(); | 372 Bundle extra = intent.getExtras(); |
| 374 if (action.equals(ProxyService.BROADCAST_STATE_CHANGED)) | 373 if (action.equals(ProxyService.BROADCAST_STATE_CHANGED)) |
| 375 { | 374 { |
| 376 if (extra.getBoolean("enabled")) | 375 if (extra.getBoolean("enabled")) |
| 377 { | 376 { |
| 378 // If service is enabled in manual mode, show configuration message | 377 // If service is enabled in manual mode, show configuration message |
| 379 if (extra.getBoolean("manual")) | 378 if (extra.getBoolean("manual")) |
| 380 { | 379 { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 395 if (action.equals(ProxyService.BROADCAST_PROXY_FAILED)) | 394 if (action.equals(ProxyService.BROADCAST_PROXY_FAILED)) |
| 396 { | 395 { |
| 397 String msg = extra.getString("msg"); | 396 String msg = extra.getString("msg"); |
| 398 new AlertDialog.Builder(Preferences.this).setTitle(R.string.error).setMe ssage(msg).setIcon(android.R.drawable.ic_dialog_alert).setPositiveButton(R.strin g.ok, null).create().show(); | 397 new AlertDialog.Builder(Preferences.this).setTitle(R.string.error).setMe ssage(msg).setIcon(android.R.drawable.ic_dialog_alert).setPositiveButton(R.strin g.ok, null).create().show(); |
| 399 setEnabled(false); | 398 setEnabled(false); |
| 400 } | 399 } |
| 401 if (action.equals(AdblockPlus.BROADCAST_SUBSCRIPTION_STATUS)) | 400 if (action.equals(AdblockPlus.BROADCAST_SUBSCRIPTION_STATUS)) |
| 402 { | 401 { |
| 403 final String text = extra.getString("text"); | 402 final String text = extra.getString("text"); |
| 404 final long time = extra.getLong("time"); | 403 final long time = extra.getLong("time"); |
| 405 runOnUiThread(new Runnable() { | 404 runOnUiThread(new Runnable() |
| 405 { | |
| 406 public void run() | 406 public void run() |
| 407 { | 407 { |
| 408 setSubscriptionStatus(text, time); | 408 setSubscriptionStatus(text, time); |
| 409 } | 409 } |
| 410 }); | 410 }); |
| 411 } | 411 } |
| 412 } | 412 } |
| 413 }; | 413 }; |
| 414 | 414 |
| 415 /** | 415 /** |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 | 464 |
| 465 @Override | 465 @Override |
| 466 protected void onSaveInstanceState(Bundle outState) | 466 protected void onSaveInstanceState(Bundle outState) |
| 467 { | 467 { |
| 468 outState.putString("subscriptionSummary", subscriptionSummary); | 468 outState.putString("subscriptionSummary", subscriptionSummary); |
| 469 outState.putString("configurationMsg", configurationMsg); | 469 outState.putString("configurationMsg", configurationMsg); |
| 470 outState.putBoolean("showAbout", showAbout); | 470 outState.putBoolean("showAbout", showAbout); |
| 471 super.onSaveInstanceState(outState); | 471 super.onSaveInstanceState(outState); |
| 472 } | 472 } |
| 473 } | 473 } |
| LEFT | RIGHT |