Compare commits

..

2 Commits
v0.5 ... master

Author SHA1 Message Date
789c7e3d28 Title and thumbnail support 2022-07-14 16:18:49 +02:00
265dd88054 Add install links 2022-01-11 01:42:58 +01:00
7 changed files with 88 additions and 12 deletions

View File

@ -1,4 +1,11 @@
# Show Youtube Dislikes # Show Youtube Dislikes
## Installation
[F-Droid](https://f-droid.org/en/packages/com.jesperh.showyoutubedislikes/)
[APK](https://github.com/jesperbakhandskemager/view-youtube-dislike/releases/latest)
## Description
Bring back Youtube Dislikes for Android Bring back Youtube Dislikes for Android
This is a simple application, that parses the data from the "returnyoutubedislike.com" API, and shows you their estimate dislike count on videos. This is a simple application, that parses the data from the "returnyoutubedislike.com" API, and shows you their estimate dislike count on videos.

View File

@ -9,8 +9,8 @@ android {
applicationId "com.jesperh.showyoutubedislikes" applicationId "com.jesperh.showyoutubedislikes"
minSdk 21 minSdk 21
targetSdk 32 targetSdk 32
versionCode 5 versionCode 10
versionName "0.4" versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@ -21,6 +21,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
} }
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
@ -33,6 +34,7 @@ dependencies {
implementation 'com.google.android.material:material:1.4.0' implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2' implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
implementation 'com.android.volley:volley:1.2.0' implementation 'com.android.volley:volley:1.2.0'
implementation 'com.squareup.picasso:picasso:2.8'
testImplementation 'junit:junit:4.+' testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

View File

@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 5, "versionCode": 10,
"versionName": "0.4", "versionName": "1.0.0",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

View File

@ -1,23 +1,38 @@
package com.jesperh.showyoutubedislikes; package com.jesperh.showyoutubedislikes;
import static android.content.ContentValues.TAG;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.android.volley.Request; import com.android.volley.Request;
import com.android.volley.RequestQueue; import com.android.volley.RequestQueue;
import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley; import com.android.volley.toolbox.Volley;
import com.squareup.picasso.Picasso;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class DisplayMessageActivity extends AppCompatActivity { public class DisplayMessageActivity extends AppCompatActivity {
@ -115,6 +130,7 @@ public class DisplayMessageActivity extends AppCompatActivity {
} }
String FINAL_URL = API_BASE_URL + API_GET_VOTES_QUERY + VIDEO_ID; String FINAL_URL = API_BASE_URL + API_GET_VOTES_QUERY + VIDEO_ID;
String oEmbedURL = "https://youtube.com/oembed?format=json&url=" + YouTubeLink;
// Define the text boxes // Define the text boxes
final TextView textViewDislikes = (TextView) findViewById(R.id.YTDislikes); final TextView textViewDislikes = (TextView) findViewById(R.id.YTDislikes);
@ -123,6 +139,9 @@ public class DisplayMessageActivity extends AppCompatActivity {
final TextView textViewVideoLink = (TextView) findViewById(R.id.YTVideoLink); final TextView textViewVideoLink = (TextView) findViewById(R.id.YTVideoLink);
final TextView textViewRatio = (TextView) findViewById(R.id.YTRatio); final TextView textViewRatio = (TextView) findViewById(R.id.YTRatio);
final TextView videoTitle = (TextView) findViewById(R.id.videoTitle);
final ImageView ThumbnailView = (ImageView)findViewById(R.id.thumbnail_View);
StringRequest myRequest = new StringRequest(Request.Method.GET, FINAL_URL, StringRequest myRequest = new StringRequest(Request.Method.GET, FINAL_URL,
response -> { response -> {
try{ try{
@ -140,25 +159,48 @@ public class DisplayMessageActivity extends AppCompatActivity {
volleyError -> ErrorDownloading() volleyError -> ErrorDownloading()
// Toast.makeText(DisplayMessageActivity.this, volleyError.getMessage(), Toast.LENGTH_SHORT).show() // Toast.makeText(DisplayMessageActivity.this, volleyError.getMessage(), Toast.LENGTH_SHORT).show()
); );
StringRequest oEmbedRequest = new StringRequest(Request.Method.GET, oEmbedURL,
response -> {
try{
//Create a JSON object containing information from the API.
JSONObject myJsonObject = new JSONObject(response);
// Set video title
videoTitle.setText(myJsonObject.getString("title"));
// Set video thumbnail
String thumbnailUrl = myJsonObject.getString("thumbnail_url");
Picasso.get().load(thumbnailUrl).into(ThumbnailView);
} catch (JSONException e) {
e.printStackTrace();
}
},
volleyError -> ErrorDownloading()
// Toast.makeText(DisplayMessageActivity.this, volleyError.getMessage(), Toast.LENGTH_SHORT).show()
);
RequestQueue requestQueue = Volley.newRequestQueue(this); RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(myRequest); requestQueue.add(myRequest);
requestQueue.add(oEmbedRequest);
return ""; return "";
} }
public void ErrorDownloading() public void ErrorDownloading()
{ {
final TextView textViewDislikes = (TextView) findViewById(R.id.YTDislikes); final TextView textViewDislikes = findViewById(R.id.YTDislikes);
final TextView textViewLikes = (TextView) findViewById(R.id.YTLikes); final TextView textViewLikes = findViewById(R.id.YTLikes);
final TextView textViewViews = (TextView) findViewById(R.id.YTViews); final TextView textViewViews = findViewById(R.id.YTViews);
final TextView textViewVideoLink = (TextView) findViewById(R.id.YTVideoLink); final TextView textViewVideoLink = findViewById(R.id.YTVideoLink);
final TextView textViewRatio = (TextView) findViewById(R.id.YTRatio); final TextView textViewRatio = findViewById(R.id.YTRatio);
final TextView videoTitle = findViewById(R.id.videoTitle);
textViewDislikes.setText("Error Downloading!"); textViewDislikes.setText("Error Downloading!");
textViewLikes.setText("Error Downloading!"); textViewLikes.setText("Error Downloading!");
textViewRatio.setText("Error Downloading!"); textViewRatio.setText("Error Downloading!");
textViewViews.setText("Error Downloading!"); textViewViews.setText("Error Downloading!");
textViewVideoLink.setText("Error Downloading!"); textViewVideoLink.setText("Error Downloading!");
textViewVideoLink.setText("Unknown Title");
} }

View File

@ -160,4 +160,30 @@
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4" /> app:layout_constraintTop_toBottomOf="@+id/textView4" />
<TextView
android:id="@+id/videoTitle"
android:layout_width="294dp"
android:layout_height="47dp"
android:layout_marginStart="112dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="78dp"
android:text="Title"
android:textColor="@android:color/primary_text_dark"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/YTVideoLink" />
<ImageView
android:id="@+id/thumbnail_View"
android:layout_width="411dp"
android:layout_height="166dp"
android:layout_marginTop="13dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/videoTitle"
app:srcCompat="@mipmap/rydblogo" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -5,7 +5,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath "com.android.tools.build:gradle:7.0.2" classpath 'com.android.tools.build:gradle:7.1.3'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files

View File

@ -1,7 +1,6 @@
#Sat Jan 01 22:38:49 CET 2022 #Sat Jan 01 22:38:49 CET 2022
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
distributionSha256Sum=e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637