diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/org/connectbot/HostListActivity.java | 4 | ||||
| -rw-r--r-- | src/org/connectbot/util/UpdateHelper.java | 225 | 
2 files changed, 0 insertions, 229 deletions
| diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java index a0e40e8..052f139 100644 --- a/src/org/connectbot/HostListActivity.java +++ b/src/org/connectbot/HostListActivity.java @@ -25,7 +25,6 @@ import org.connectbot.service.TerminalManager;  import org.connectbot.transport.TransportFactory;  import org.connectbot.util.HostDatabase;  import org.connectbot.util.PreferenceConstants; -import org.connectbot.util.UpdateHelper;  import android.app.Activity;  import android.app.AlertDialog; @@ -169,9 +168,6 @@ public class HostListActivity extends ListActivity {  			this.startActivityForResult(new Intent(this, WizardActivity.class), REQUEST_EULA);  		} -		// start thread to check for new version -		new UpdateHelper(this); -  		this.makingShortcut = Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())  								|| Intent.ACTION_PICK.equals(getIntent().getAction()); diff --git a/src/org/connectbot/util/UpdateHelper.java b/src/org/connectbot/util/UpdateHelper.java deleted file mode 100644 index a43ba57..0000000 --- a/src/org/connectbot/util/UpdateHelper.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * ConnectBot: simple, powerful, open-source SSH client for Android - * Copyright 2007 Kenny Root, Jeffrey Sharkey - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *     http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.connectbot.util; - -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.Locale; - -import org.connectbot.R; -import org.json.JSONObject; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Handler; -import android.os.Message; -import android.preference.PreferenceManager; -import android.util.Log; - -/** - * Helper class that checks for updates to this application. On construction, it - * spawns a background thread that checks for any app updates. If available, - * shows a dialog to the user, prompting them to visit Market for the upgrade. - * - * <b>Be sure to change the UPDATE_URL field before using this class.</b> Then - * place a text file at that URL containing JSON data in the format: - * - * <code>{"versionCode": 110, "features": "Brand new interface with over - * 9,000 improvements.", "target": "search?q=searchterms"}</code> - * - * Which should contain information about your newest version. The - * <code>target</code> field is used to build an Intent that launches Market on - * the device, simply be prefixing it with <code>market://</code>. If you know - * your exact Market ID, you could use the value - * <code>details?id=yourexactmarketid</code> - * - * If you're looking for an advanced version-checking system that offers more - * customization, check out Veecheck: http://www.tomgibara.com/android/veecheck/ - * - * @author jsharkey - */ -public final class UpdateHelper implements Runnable { - -	public final static String TAG = "ConnectBot.UpdateHelper"; -	public final static String UPDATE_URL = "http://connectbot.org/version"; - -	protected Context context; - -	private String packageName, versionName; -	protected int versionCode; - -	private String userAgent; - -	/** -	 * Constructor will automatically spawn thread to check for updates. -	 * Recommended usage is <code>new UpdateHelper(this);</code> in the first -	 * onCreate() of your app. -	 */ -	public UpdateHelper(Context context) { -		this.context = context; - -		try { -			// read current version information about this package -			PackageManager manager = context.getPackageManager(); -			PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); -			this.packageName = info.packageName; -			this.versionCode = info.versionCode; -			this.versionName = info.versionName; - -		} catch(Exception e) { -			Log.e(TAG, "Couldn't find package information in PackageManager", e); -			return; -		} - -		// decide if we really need to check for update -		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - -		String frequency; -		try { -			frequency = prefs.getString(PreferenceConstants.UPDATE, PreferenceConstants.UPDATE_DAILY); -		} catch (ClassCastException cce) { -			// Hm, somehow we got a long in there in the previous upgrades. -			frequency = PreferenceConstants.UPDATE_DAILY; -			Editor editor = prefs.edit(); -			editor.putString(PreferenceConstants.UPDATE, frequency); -			editor.commit(); -		} -		long lastChecked = prefs.getLong(PreferenceConstants.LAST_CHECKED, 0); -		long now = (System.currentTimeMillis() / 1000); -		long passed = now - lastChecked; - -		boolean shouldCheck = false; -		if (PreferenceConstants.UPDATE_DAILY.equals(frequency)) { -			shouldCheck = (passed > 60 * 60 * 24); -		} else if (PreferenceConstants.UPDATE_WEEKLY.equals(frequency)) { -			shouldCheck = (passed > 60 * 60 * 24 * 7); -		} - -		// place version information in user-agent string to be used later -		userAgent = String.format("%s/%s (%d, freq=%s, lang=%s)", -				packageName, versionName, versionCode, frequency, -				Locale.getDefault().getLanguage()); - -		if(shouldCheck) { -			// spawn thread to check for update -			// Note that this class should be marked final because a thread is started in the constructor. -			Thread updateThread = new Thread(this); -			updateThread.setName("UpdateHelper"); -			updateThread.start(); - -			// update our last-checked time -			Editor editor = prefs.edit(); -			editor.putLong(PreferenceConstants.LAST_CHECKED, now); -			editor.commit(); - -		} - -	} - -	public void run() { -		try { -			// fetch and parse the version update information as json -			// pass information off to handler to create -			JSONObject json = new JSONObject(UpdateHelper.getUrl(UPDATE_URL, userAgent)); -			Message.obtain(versionHandler, -1, json).sendToTarget(); - -		} catch(Exception e) { -			Log.e(TAG, "Problem while fetching/parsing update response", e); - -		} -	} - - -	/** -	 * Handler that will parse the JSON response and show dialog to user if an -	 * update is available. -	 */ -	private Handler versionHandler = new Handler() { -		@Override -		public void handleMessage(Message msg) { - -			// make sure we are being passed a real json object -			if(!(msg.obj instanceof JSONObject)) return; -			JSONObject json = (JSONObject)msg.obj; - -			// pull out version and target information from response -			final int versionCode = json.optInt("versionCode"); -			final String features = json.optString("features"); -			final String target = "market://" + json.optString("target"); - -			// skip if we're already good enough -			if(versionCode <= UpdateHelper.this.versionCode) return; - -			// build dialog to prompt user about updating -			new AlertDialog.Builder(context) -				.setTitle(R.string.upgrade) -				.setMessage(features) -				.setPositiveButton(R.string.upgrade_pos, new DialogInterface.OnClickListener() { -					public void onClick(DialogInterface dialog, int which) { -						Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(target)); -						context.startActivity(intent); -					} -				}) -				.setNegativeButton(R.string.upgrade_neg, null).create().show(); - -		} - - -	}; - -	/** -	 * Read contents of a URL and return as a String. Handles any server -	 * downtime with a 6-second timeout. -	 */ -	private static String getUrl(String tryUrl, String userAgent) throws Exception { - -		URL url = new URL(tryUrl); -		URLConnection connection = url.openConnection(); -		connection.setConnectTimeout(6000); -		connection.setReadTimeout(6000); -		connection.setRequestProperty("User-Agent", userAgent); -		connection.connect(); - -		InputStream is = connection.getInputStream(); -		ByteArrayOutputStream os = new ByteArrayOutputStream(); - -		int bytesRead; -		byte[] buffer = new byte[1024]; -		while ((bytesRead = is.read(buffer)) != -1) { -			os.write(buffer, 0, bytesRead); -		} - -		os.flush(); -		os.close(); -		is.close(); - -		return new String(os.toByteArray()); - -	} - - -} | 
