From 75a44fb30a241cf6f09d3fc3a7356fcf45627008 Mon Sep 17 00:00:00 2001 From: Kartikey Kushwaha Date: Sat, 11 Aug 2018 19:13:52 +0530 Subject: [PATCH] Added HTTPS request to get version data. Added APK flaor for github and fdroid. --- app/build.gradle | 17 +++ .../java/org/schabi/newpipe/MainActivity.java | 111 ++++++++++++++++++ build.gradle | 2 +- 3 files changed, 129 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a5ff67bee..7264c0ab9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,12 +14,14 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } + buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug { multiDexEnabled true @@ -34,10 +36,25 @@ android { // but continue the build even when errors are found: abortOnError false } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + flavorDimensions "apkSource" + productFlavors { + github { + dimension "apkSource" + applicationIdSuffix ".github" + + } + + fdroid { + dimension "apkSource" + applicationIdSuffix ".fdroid" + } + } } ext { diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 0ce6772bb..4dba91706 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -47,6 +48,8 @@ import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; +import org.json.JSONException; +import org.json.JSONObject; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.fragments.BackPressable; @@ -61,6 +64,13 @@ import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.ThemeHelper; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release"); @@ -80,6 +90,10 @@ public class MainActivity extends AppCompatActivity { ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this)); + if (BuildConfig.FLAVOR.equals("github")) { + new versionCheckTask().execute(); + } + super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -409,4 +423,101 @@ public class MainActivity extends AppCompatActivity { NavigationHelper.gotoMainFragment(getSupportFragmentManager()); } } + + /** + * AsyncTask to check if there is a newer version of the github apk available or not. + * If there is a newer version we show a notification, informing the user. On tapping + * the notification, the user will be directed to download link. + */ + private static class versionCheckTask extends AsyncTask { + + String newPipeApiUrl = "https://api.myjson.com/bins/19gx44"; + int timeoutPeriod = 10000; + + @Override + protected String doInBackground(Void... voids) { + + String output; + + HttpURLConnection connection = null; + + try { + + URL url = new URL(newPipeApiUrl); + + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(timeoutPeriod); + connection.setReadTimeout(timeoutPeriod); + connection.setRequestProperty("Content-length", "0"); + connection.setUseCaches(false); + connection.setAllowUserInteraction(false); + connection.connect(); + + int responseStatus = connection.getResponseCode(); + + switch (responseStatus) { + + case 200: + case 201: + BufferedReader bufferedReader + = new BufferedReader( + new InputStreamReader(connection.getInputStream())); + + StringBuilder stringBuilder = new StringBuilder(); + + String line; + + while ((line = bufferedReader.readLine()) != null) { + stringBuilder.append(line + "\n"); + } + + bufferedReader.close(); + output = stringBuilder.toString(); + + return output; + } + } catch (MalformedURLException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (connection != null) { + try { + connection.disconnect(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + return null; + } + + @Override + protected void onPostExecute(String output) { + + if (output != null) { + + Log.i("output---", output); + + try { + JSONObject mainObject = new JSONObject(output); + JSONObject flavoursObject = mainObject.getJSONObject("flavors"); + JSONObject githubObject = flavoursObject.getJSONObject("github"); + JSONObject githubStableObject = githubObject.getJSONObject("stable"); + + String version = githubStableObject.getString("version"); + // String versionCode = githubStableObject.getString("version_code"); + String apkLocationUrl = githubStableObject.getString("apk"); + + Log.i("jsonConvert---", version + " " + apkLocationUrl); + } catch (JSONException ex) { + ex.printStackTrace(); + } + } + } + } + + } diff --git a/build.gradle b/build.gradle index a45c00aef..20c8a0dfc 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files