Index: src/org/adblockplus/android/updater/AlarmReceiver.java |
=================================================================== |
deleted file mode 100644 |
--- a/src/org/adblockplus/android/updater/AlarmReceiver.java |
+++ /dev/null |
@@ -1,223 +0,0 @@ |
-/* |
- * This file is part of Adblock Plus <http://adblockplus.org/>, |
- * Copyright (C) 2006-2014 Eyeo GmbH |
- * |
- * Adblock Plus is free software: you can redistribute it and/or modify |
- * it under the terms of the GNU General Public License version 3 as |
- * published by the Free Software Foundation. |
- * |
- * Adblock Plus is distributed in the hope that it will be useful, |
- * but WITHOUT ANY WARRANTY; without even the implied warranty of |
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
- * GNU General Public License for more details. |
- * |
- * You should have received a copy of the GNU General Public License |
- * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
- */ |
- |
-package org.adblockplus.android.updater; |
- |
-import java.io.IOException; |
-import java.io.StringReader; |
-import java.net.URI; |
-import java.net.URISyntaxException; |
-import java.net.URL; |
-import java.util.Locale; |
- |
-import javax.xml.parsers.DocumentBuilder; |
-import javax.xml.parsers.DocumentBuilderFactory; |
-import javax.xml.parsers.ParserConfigurationException; |
- |
-import org.adblockplus.android.AdblockPlus; |
-import org.adblockplus.android.R; |
-import org.adblockplus.android.Utils; |
-import org.apache.http.HttpEntity; |
-import org.apache.http.HttpResponse; |
-import org.apache.http.client.methods.HttpGet; |
-import org.apache.http.impl.client.DefaultHttpClient; |
-import org.apache.http.util.EntityUtils; |
-import org.w3c.dom.Document; |
-import org.w3c.dom.Element; |
-import org.w3c.dom.NodeList; |
-import org.xml.sax.InputSource; |
-import org.xml.sax.SAXException; |
- |
-import android.app.Notification; |
-import android.app.NotificationManager; |
-import android.app.PendingIntent; |
-import android.content.BroadcastReceiver; |
-import android.content.Context; |
-import android.content.Intent; |
-import android.content.pm.PackageManager.NameNotFoundException; |
-import android.net.ConnectivityManager; |
-import android.net.NetworkInfo; |
-import android.os.Build; |
-import android.util.Log; |
- |
-/** |
- * Processes Alarm event to check for update availability. |
- */ |
-public class AlarmReceiver extends BroadcastReceiver |
-{ |
- private static final String TAG = Utils.getTag(AlarmReceiver.class); |
- private static final int NOTIFICATION_ID = R.string.app_name + 1; |
- |
- @Override |
- public void onReceive(final Context context, final Intent intent) |
- { |
- Log.i(TAG, "Alarm; requesting updater service"); |
- |
- final AdblockPlus application = AdblockPlus.getApplication(); |
- |
- // Indicates manual (immediate) update check which requires response to user. |
- final boolean notify = intent.getBooleanExtra("notifynoupdate", false); |
- |
- // Check network availability |
- boolean connected = false; |
- final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); |
- NetworkInfo networkInfo = null; |
- if (connectivityManager != null) |
- { |
- networkInfo = connectivityManager.getActiveNetworkInfo(); |
- connected = networkInfo == null ? false : networkInfo.isConnected(); |
- } |
- |
- // Prepare notification |
- final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); |
- final Notification notification = new Notification(); |
- notification.icon = R.drawable.ic_stat_warning; |
- notification.when = System.currentTimeMillis(); |
- notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE; |
- if (notify) |
- notification.flags |= Notification.DEFAULT_SOUND; |
- final PendingIntent emptyIntent = PendingIntent.getActivity(context, 0, new Intent(), 0); |
- |
- // Get update info |
- if (application.checkWriteExternalPermission() && connected) |
- { |
- final Thread thread = new Thread(new Runnable() |
- { |
- @Override |
- public void run() |
- { |
- boolean success = false; |
- try |
- { |
- // Read updates manifest |
- final DefaultHttpClient httpClient = new DefaultHttpClient(); |
- |
- final String locale = Locale.getDefault().toString().toLowerCase(); |
- final String device = AdblockPlus.getDeviceName(); |
- final boolean releaseBuild = context.getResources().getBoolean(R.bool.def_release); |
- final String updateUrlTemplate = context.getString(releaseBuild ? R.string.update_url : R.string.devbuild_update_url); |
- final URL updateUrl = new URL(String.format(updateUrlTemplate, Build.VERSION.SDK_INT, AdblockPlus.getApplication().getBuildNumber(), locale, device)); |
- // The following line correctly url-encodes query string parameters |
- final URI uri = new URI(updateUrl.getProtocol(), updateUrl.getUserInfo(), updateUrl.getHost(), updateUrl.getPort(), updateUrl.getPath(), updateUrl.getQuery(), updateUrl.getRef()); |
- final HttpGet httpGet = new HttpGet(uri); |
- |
- final HttpResponse httpResponse = httpClient.execute(httpGet); |
- final HttpEntity httpEntity = httpResponse.getEntity(); |
- final String xml = EntityUtils.toString(httpEntity); |
- |
- // Parse XML |
- final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
- final DocumentBuilder db = dbf.newDocumentBuilder(); |
- |
- final InputSource is = new InputSource(); |
- is.setCharacterStream(new StringReader(xml)); |
- final Document doc = db.parse(is); |
- |
- // Find best match |
- final NodeList nl = doc.getElementsByTagName("updatecheck"); |
- int newBuild = -1; |
- int newApi = -1; |
- String newUrl = null; |
- for (int i = 0; i < nl.getLength(); i++) |
- { |
- final Element e = (Element) nl.item(i); |
- final String url = e.getAttribute("package"); |
- final int build = Integer.parseInt(e.getAttribute("build")); |
- final int api = Integer.parseInt(e.getAttribute("api")); |
- if (api > android.os.Build.VERSION.SDK_INT) |
- continue; |
- if ((build > newBuild) || (build == newBuild && api > newApi)) |
- { |
- newBuild = build; |
- newApi = api; |
- newUrl = url; |
- } |
- } |
- |
- final int thisBuild = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode; |
- |
- // Notify user if newer update was found |
- if (thisBuild < newBuild) |
- { |
- notification.icon = R.drawable.ic_stat_download; |
- final Intent intent = new Intent(context, UpdaterActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- intent.setAction("download"); |
- intent.putExtra("url", newUrl); |
- intent.putExtra("build", newBuild); |
- final PendingIntent updateIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); |
- notification.setLatestEventInfo(context, context.getText(R.string.app_name), context.getString(R.string.msg_update_available), updateIntent); |
- notificationManager.notify(NOTIFICATION_ID, notification); |
- } |
- // Notify user that no update was found |
- else if (notify) |
- { |
- notification.setLatestEventInfo(context, context.getText(R.string.app_name), context.getString(R.string.msg_update_missing), emptyIntent); |
- notificationManager.notify(NOTIFICATION_ID, notification); |
- } |
- success = true; |
- } |
- catch (final IOException e) |
- { |
- } |
- catch (final NumberFormatException e) |
- { |
- } |
- catch (final NameNotFoundException e) |
- { |
- } |
- catch (final ParserConfigurationException e) |
- { |
- } |
- catch (final SAXException e) |
- { |
- Log.e(TAG, "Error", e); |
- } |
- catch (final URISyntaxException e) |
- { |
- Log.e(TAG, "Error", e); |
- } |
- finally |
- { |
- if (!success) |
- { |
- // Notify user about failure |
- if (notify) |
- { |
- notification.setLatestEventInfo(context, context.getText(R.string.app_name), context.getString(R.string.msg_update_fail), emptyIntent); |
- notificationManager.notify(NOTIFICATION_ID, notification); |
- } |
- } |
- // Schedule next check |
- application.scheduleUpdater(0); |
- } |
- } |
- }); |
- thread.start(); |
- } |
- else |
- { |
- // Notify user about failure |
- if (notify) |
- { |
- notification.setLatestEventInfo(context, context.getText(R.string.app_name), context.getString(R.string.msg_update_fail), emptyIntent); |
- notificationManager.notify(NOTIFICATION_ID, notification); |
- } |
- // Schedule retry in 30 minutes - there is no connection available at this time |
- application.scheduleUpdater(30); |
- } |
- } |
-} |