mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Clean up CheckForNewAppVersionTask
This commit is contained in:
		| @@ -17,8 +17,10 @@ import android.util.Log; | ||||
| import androidx.core.app.NotificationCompat; | ||||
| import androidx.core.app.NotificationManagerCompat; | ||||
|  | ||||
| import org.json.JSONException; | ||||
| import org.json.JSONObject; | ||||
| import com.grack.nanojson.JsonObject; | ||||
| import com.grack.nanojson.JsonParser; | ||||
| import com.grack.nanojson.JsonParserException; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.report.UserAction; | ||||
| @@ -33,8 +35,6 @@ import java.security.cert.CertificateException; | ||||
| import java.security.cert.CertificateFactory; | ||||
| import java.security.cert.X509Certificate; | ||||
|  | ||||
| import okhttp3.OkHttpClient; | ||||
|  | ||||
| /** | ||||
|  * AsyncTask to check if there is a newer version of the NewPipe github apk available or not. | ||||
|  * If there is a newer version we show a notification, informing the user. On tapping | ||||
| @@ -43,14 +43,11 @@ import okhttp3.OkHttpClient; | ||||
| public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|     private static final boolean DEBUG = MainActivity.DEBUG; | ||||
|     private static final String TAG = CheckForNewAppVersionTask.class.getSimpleName(); | ||||
|  | ||||
|     private static final Application APP = App.getApp(); | ||||
|     private static final String GITHUB_APK_SHA1 | ||||
|             = "B0:2E:90:7C:1C:D6:FC:57:C3:35:F0:88:D0:8F:50:5F:94:E4:D2:15"; | ||||
|     private static final String NEWPIPE_API_URL = "https://newpipe.schabi.org/api/data.json"; | ||||
|     private static final int TIMEOUT_PERIOD = 30; | ||||
|  | ||||
|     private SharedPreferences mPrefs; | ||||
|     private OkHttpClient client; | ||||
|  | ||||
|     /** | ||||
|      * Method to get the apk's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133. | ||||
| @@ -58,31 +55,30 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|      * @return String with the apk's SHA1 fingeprint in hexadecimal | ||||
|      */ | ||||
|     private static String getCertificateSHA1Fingerprint() { | ||||
|         PackageManager pm = APP.getPackageManager(); | ||||
|         String packageName = APP.getPackageName(); | ||||
|         int flags = PackageManager.GET_SIGNATURES; | ||||
|         final PackageManager pm = APP.getPackageManager(); | ||||
|         final String packageName = APP.getPackageName(); | ||||
|         final int flags = PackageManager.GET_SIGNATURES; | ||||
|         PackageInfo packageInfo = null; | ||||
|  | ||||
|         try { | ||||
|             packageInfo = pm.getPackageInfo(packageName, flags); | ||||
|         } catch (PackageManager.NameNotFoundException ex) { | ||||
|             ErrorActivity.reportError(APP, ex, null, null, | ||||
|         } catch (PackageManager.NameNotFoundException e) { | ||||
|             ErrorActivity.reportError(APP, e, null, null, | ||||
|                     ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", | ||||
|                             "Could not find package info", R.string.app_ui_crash)); | ||||
|         } | ||||
|  | ||||
|         Signature[] signatures = packageInfo.signatures; | ||||
|         byte[] cert = signatures[0].toByteArray(); | ||||
|         InputStream input = new ByteArrayInputStream(cert); | ||||
|         final Signature[] signatures = packageInfo.signatures; | ||||
|         final byte[] cert = signatures[0].toByteArray(); | ||||
|         final InputStream input = new ByteArrayInputStream(cert); | ||||
|  | ||||
|         CertificateFactory cf = null; | ||||
|         X509Certificate c = null; | ||||
|  | ||||
|         try { | ||||
|             cf = CertificateFactory.getInstance("X509"); | ||||
|             final CertificateFactory cf = CertificateFactory.getInstance("X509"); | ||||
|             c = (X509Certificate) cf.generateCertificate(input); | ||||
|         } catch (CertificateException ex) { | ||||
|             ErrorActivity.reportError(APP, ex, null, null, | ||||
|         } catch (CertificateException e) { | ||||
|             ErrorActivity.reportError(APP, e, null, null, | ||||
|                     ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", | ||||
|                             "Certificate error", R.string.app_ui_crash)); | ||||
|         } | ||||
| @@ -91,14 +87,10 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|  | ||||
|         try { | ||||
|             MessageDigest md = MessageDigest.getInstance("SHA1"); | ||||
|             byte[] publicKey = md.digest(c.getEncoded()); | ||||
|             final byte[] publicKey = md.digest(c.getEncoded()); | ||||
|             hexString = byte2HexFormatted(publicKey); | ||||
|         } catch (NoSuchAlgorithmException ex1) { | ||||
|             ErrorActivity.reportError(APP, ex1, null, null, | ||||
|                     ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", | ||||
|                             "Could not retrieve SHA1 key", R.string.app_ui_crash)); | ||||
|         } catch (CertificateEncodingException ex2) { | ||||
|             ErrorActivity.reportError(APP, ex2, null, null, | ||||
|         } catch (NoSuchAlgorithmException | CertificateEncodingException e) { | ||||
|             ErrorActivity.reportError(APP, e, null, null, | ||||
|                     ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", | ||||
|                             "Could not retrieve SHA1 key", R.string.app_ui_crash)); | ||||
|         } | ||||
| @@ -107,11 +99,11 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|     } | ||||
|  | ||||
|     private static String byte2HexFormatted(final byte[] arr) { | ||||
|         StringBuilder str = new StringBuilder(arr.length * 2); | ||||
|         final StringBuilder str = new StringBuilder(arr.length * 2); | ||||
|  | ||||
|         for (int i = 0; i < arr.length; i++) { | ||||
|             String h = Integer.toHexString(arr[i]); | ||||
|             int l = h.length(); | ||||
|             final int l = h.length(); | ||||
|             if (l == 1) { | ||||
|                 h = "0" + h; | ||||
|             } | ||||
| @@ -132,11 +124,11 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|  | ||||
|     @Override | ||||
|     protected void onPreExecute() { | ||||
|         mPrefs = PreferenceManager.getDefaultSharedPreferences(APP); | ||||
|         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(APP); | ||||
|  | ||||
|         // Check if user has enabled/disabled update checking | ||||
|         // and if the current apk is a github one or not. | ||||
|         if (!mPrefs.getBoolean(APP.getString(R.string.update_app_key), true) || !isGithubApk()) { | ||||
|         if (!prefs.getBoolean(APP.getString(R.string.update_app_key), true) || !isGithubApk()) { | ||||
|             this.cancel(true); | ||||
|         } | ||||
|     } | ||||
| @@ -150,10 +142,10 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|         // Make a network request to get latest NewPipe data. | ||||
|         try { | ||||
|             return DownloaderImpl.getInstance().get(NEWPIPE_API_URL).responseBody(); | ||||
|         } catch (IOException | ReCaptchaException ex) { | ||||
|         } catch (IOException | ReCaptchaException e) { | ||||
|             // connectivity problems, do not alarm user and fail silently | ||||
|             if (DEBUG) { | ||||
|                 Log.w(TAG, Log.getStackTraceString(ex)); | ||||
|                 Log.w(TAG, Log.getStackTraceString(e)); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -166,21 +158,19 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|         if (response != null) { | ||||
|  | ||||
|             try { | ||||
|                 JSONObject mainObject = new JSONObject(response); | ||||
|                 JSONObject flavoursObject = mainObject.getJSONObject("flavors"); | ||||
|                 JSONObject githubObject = flavoursObject.getJSONObject("github"); | ||||
|                 JSONObject githubStableObject = githubObject.getJSONObject("stable"); | ||||
|                 final JsonObject githubStableObject = JsonParser.object().from(response) | ||||
|                         .getObject("flavors").getObject("github").getObject("stable"); | ||||
|  | ||||
|                 String versionName = githubStableObject.getString("version"); | ||||
|                 String versionCode = githubStableObject.getString("version_code"); | ||||
|                 String apkLocationUrl = githubStableObject.getString("apk"); | ||||
|                 final String versionName = githubStableObject.getString("version"); | ||||
|                 final int versionCode = githubStableObject.getInt("version_code"); | ||||
|                 final String apkLocationUrl = githubStableObject.getString("apk"); | ||||
|  | ||||
|                 compareAppVersionAndShowNotification(versionName, apkLocationUrl, versionCode); | ||||
|  | ||||
|             } catch (JSONException ex) { | ||||
|             } catch (JsonParserException e) { | ||||
|                 // connectivity problems, do not alarm user and fail silently | ||||
|                 if (DEBUG) { | ||||
|                     Log.w(TAG, Log.getStackTraceString(ex)); | ||||
|                     Log.w(TAG, Log.getStackTraceString(e)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -196,17 +186,17 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|      */ | ||||
|     private void compareAppVersionAndShowNotification(final String versionName, | ||||
|                                                       final String apkLocationUrl, | ||||
|                                                       final String versionCode) { | ||||
|                                                       final int versionCode) { | ||||
|         int notificationId = 2000; | ||||
|  | ||||
|         if (BuildConfig.VERSION_CODE < Integer.valueOf(versionCode)) { | ||||
|         if (BuildConfig.VERSION_CODE < versionCode) { | ||||
|  | ||||
|             // A pending intent to open the apk location url in the browser. | ||||
|             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(apkLocationUrl)); | ||||
|             PendingIntent pendingIntent | ||||
|             final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(apkLocationUrl)); | ||||
|             final PendingIntent pendingIntent | ||||
|                     = PendingIntent.getActivity(APP, 0, intent, 0); | ||||
|  | ||||
|             NotificationCompat.Builder notificationBuilder = new NotificationCompat | ||||
|             final NotificationCompat.Builder notificationBuilder = new NotificationCompat | ||||
|                     .Builder(APP, APP.getString(R.string.app_update_notification_channel_id)) | ||||
|                     .setSmallIcon(R.drawable.ic_newpipe_update) | ||||
|                     .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) | ||||
| @@ -216,13 +206,14 @@ public class CheckForNewAppVersionTask extends AsyncTask<Void, Void, String> { | ||||
|                     .setContentText(APP.getString(R.string.app_update_notification_content_text) | ||||
|                             + " " + versionName); | ||||
|  | ||||
|             NotificationManagerCompat notificationManager = NotificationManagerCompat.from(APP); | ||||
|             final NotificationManagerCompat notificationManager | ||||
|                     = NotificationManagerCompat.from(APP); | ||||
|             notificationManager.notify(notificationId, notificationBuilder.build()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private boolean isConnected() { | ||||
|         ConnectivityManager cm = | ||||
|         final ConnectivityManager cm = | ||||
|                 (ConnectivityManager) APP.getSystemService(Context.CONNECTIVITY_SERVICE); | ||||
|         return cm.getActiveNetworkInfo() != null | ||||
|                 && cm.getActiveNetworkInfo().isConnected(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 wb9688
					wb9688