mirror of
https://github.com/jesperh1/view-youtube-dislike.git
synced 2025-05-17 01:38:17 +01:00
Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
789c7e3d28 | |||
265dd88054 | |||
92bb8c678b | |||
be689a9e1a | |||
e36b1bb7c4 | |||
20a45433b7 | |||
706286ccfe | |||
1ff462eb1f | |||
968753f9a0 | |||
69acab4582 | |||
4240bf9a15 | |||
ce5baf19e2 | |||
9361d64931 | |||
8ebc1bb8cd | |||
838d13f453 | |||
60912aea3f | |||
3347157b84 |
33
README.md
33
README.md
@ -1,2 +1,31 @@
|
||||
# view-youtube-dislike
|
||||
Bring back Youtube Dislike for Android (View Only)
|
||||
# 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
|
||||
|
||||
This is a simple application, that parses the data from the "returnyoutubedislike.com" API, and shows you their estimate dislike count on videos.
|
||||
|
||||
When you open the app you are presented with a text box, where you can enter a youtube url and you will be presented with the given videos stats.
|
||||
|
||||
You can also click the 'Share' button inside the official youtube app, and choose 'Show Youtube Dislikes' which will open the app on the information site for that video.
|
||||
|
||||
If possible use the desktop browser extension, as you will be contributing to the project with your dislike data, and not just leeching it, helping everyone get more accurate results.
|
||||
|
||||
I want to thank returnyoutubedislike.com for making an awesome tool, i just wanted to make it available for mobile as well.
|
||||
|
||||
This app is free and open source (it is licenced under the GNU GPLv3).
|
||||
|
||||
If you want to donate, please redirect all donations to https://returnyoutubedislike.com/donate as they are more deserving than i.
|
||||
|
||||
But if you really want to, you can donate some Monero:
|
||||
```88cPx6Gzv5RWRRJLstUt6hACF1BRKPp1RMka1ukyu2iuHT7iqzkNfMogYq3YdDAC8AAYRqmqQMkCgBXiwdD5Dvqw3LsPGLU```
|
||||
|
||||
* This is in no way affilliated with the official project
|
||||
|
||||
## TODO
|
||||
- [ ] View over other apps (Optional)
|
||||
|
@ -9,8 +9,8 @@ android {
|
||||
applicationId "com.jesperh.showyoutubedislikes"
|
||||
minSdk 21
|
||||
targetSdk 32
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
versionCode 10
|
||||
versionName "1.0.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@ -21,6 +21,7 @@ android {
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
@ -33,7 +34,7 @@ dependencies {
|
||||
implementation 'com.google.android.material:material:1.4.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
|
||||
implementation 'com.android.volley:volley:1.2.0'
|
||||
implementation files('/home/jesper/AndroidStudioProjects/ShowYoutubeDislikes/app/libs/json-simple-1.1.1.jar')
|
||||
implementation 'com.squareup.picasso:picasso:2.8'
|
||||
testImplementation 'junit:junit:4.+'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||
|
Binary file not shown.
20
app/release/output-metadata.json
Normal file
20
app/release/output-metadata.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "APK",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.jesperh.showyoutubedislikes",
|
||||
"variantName": "release",
|
||||
"elements": [
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 10,
|
||||
"versionName": "1.0.0",
|
||||
"outputFile": "app-release.apk"
|
||||
}
|
||||
],
|
||||
"elementType": "File"
|
||||
}
|
@ -1,39 +1,43 @@
|
||||
package com.jesperh.showyoutubedislikes;
|
||||
|
||||
import static android.content.ContentValues.TAG;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.volley.Request;
|
||||
import com.android.volley.RequestQueue;
|
||||
import com.android.volley.Response;
|
||||
import com.android.volley.VolleyError;
|
||||
import com.android.volley.toolbox.StringRequest;
|
||||
import com.android.volley.toolbox.Volley;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.ProtocolException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.net.URLConnection;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class DisplayMessageActivity extends AppCompatActivity {
|
||||
|
||||
// Simpler Regex: ^(https?\:\/\/)?((www\.)?youtube\.com|youtu\.be)\/.+$
|
||||
// ^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$
|
||||
Pattern YoutubeRegex = Pattern.compile("^(https?\\:\\/\\/)?((www\\.)?youtube\\.com|youtu\\.be)\\/.+$", Pattern.CASE_INSENSITIVE);
|
||||
Pattern YoutubeRegex = Pattern.compile("^(https?\\:\\/\\/)?((www\\.)?((m\\.))?youtube\\.com|youtu\\.be)\\/.+$", Pattern.CASE_INSENSITIVE);
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -80,10 +84,6 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
// the Dialog Box then it will remain show
|
||||
builder.setCancelable(false);
|
||||
|
||||
// Set the positive button with yes name
|
||||
// OnClickListener method is use of
|
||||
// DialogInterface interface.
|
||||
|
||||
AlertDialog.Builder Yes = builder
|
||||
.setPositiveButton(
|
||||
"Okay",
|
||||
@ -94,16 +94,12 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int which) {
|
||||
|
||||
// When the user click yes button
|
||||
// then app will close
|
||||
// When the user click Okay button
|
||||
// then app returns to the front page
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
// Set the Negative button with No name
|
||||
// OnClickListener method is use
|
||||
// of DialogInterface interface
|
||||
|
||||
// Create the Alert dialog
|
||||
AlertDialog alertDialog = builder.create();
|
||||
|
||||
@ -111,72 +107,111 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
alertDialog.show();
|
||||
}
|
||||
|
||||
// Capture the layout's TextView and set the string as its text
|
||||
|
||||
public static String API_BASE_URL = "https://returnyoutubedislikeapi.com/";
|
||||
public static String API_QUERY_URL = "votes?videoId=";
|
||||
|
||||
//kxOuG8jMIgI
|
||||
// Youtube Example:
|
||||
// https://www.youtube.com/watch?v=Nz9b0oJw69I
|
||||
//youtu.be Example:
|
||||
// https://youtu.be/Nz9b0oJw69I
|
||||
// API: Example
|
||||
// https://returnyoutubedislikeapi.com/votes?videoId=kxOuG8jMIgI
|
||||
public static String API_GET_VOTES_QUERY = "votes?videoId=";
|
||||
|
||||
|
||||
public String GetDataAPI(String YouTubeLink)
|
||||
{
|
||||
String result = "";
|
||||
String VIDEO_ID = "";
|
||||
if (YouTubeLink.contains("https://youtu.be"))
|
||||
{
|
||||
result = YouTubeLink.substring(17, 28);
|
||||
VIDEO_ID = YouTubeLink.substring(17, 28);
|
||||
}
|
||||
else if (YouTubeLink.contains("youtube.com"))
|
||||
{
|
||||
String[] arrOfStr = YouTubeLink.split("=", 2);
|
||||
result = arrOfStr[1];
|
||||
VIDEO_ID = arrOfStr[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
return "";
|
||||
}
|
||||
String Dislike_Count = "";
|
||||
String view_count = "";
|
||||
String like_count = "";
|
||||
//TextView textView = findViewById(R.id.YTDislikes);
|
||||
String FINAL_URL = API_BASE_URL + API_QUERY_URL + result;
|
||||
|
||||
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
|
||||
final TextView textViewDislikes = (TextView) findViewById(R.id.YTDislikes);
|
||||
final TextView textViewLikes = (TextView) findViewById(R.id.YTLikes);
|
||||
final TextView textViewViews = (TextView) findViewById(R.id.YTViews);
|
||||
final TextView textViewVideoLink = (TextView) findViewById(R.id.YTVideoLink);
|
||||
final TextView textViewRatio = (TextView) findViewById(R.id.YTRatio);
|
||||
|
||||
String myUrl = FINAL_URL;
|
||||
StringRequest myRequest = new StringRequest(Request.Method.GET, myUrl,
|
||||
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,
|
||||
response -> {
|
||||
try{
|
||||
//Create a JSON object containing information from the API.
|
||||
JSONObject myJsonObject = new JSONObject(response);
|
||||
textViewDislikes.setText(myJsonObject.getString("dislikes") + " \uD83D\uDC4E");
|
||||
textViewLikes.setText(myJsonObject.getString("likes") + " \uD83D\uDC4D");
|
||||
textViewViews.setText(myJsonObject.getString("viewCount") + " \uD83D\uDC41️");
|
||||
textViewDislikes.setText(AddComma(myJsonObject.getString("dislikes")) + " \uD83D\uDC4E");
|
||||
textViewLikes.setText(AddComma(myJsonObject.getString("likes")) + " \uD83D\uDC4D");
|
||||
textViewRatio.setText(myJsonObject.getString("rating").substring(0, 3) + " / 5 ⭐");
|
||||
textViewViews.setText(AddComma(myJsonObject.getString("viewCount")) + " \uD83D\uDC41️");
|
||||
textViewVideoLink.setText(YouTubeLink + " \uD83D\uDD17");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
},
|
||||
volleyError -> Toast.makeText(DisplayMessageActivity.this, volleyError.getMessage(), Toast.LENGTH_SHORT).show()
|
||||
volleyError -> ErrorDownloading()
|
||||
// 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.add(myRequest);
|
||||
//textView.setText("f");
|
||||
|
||||
//TextView textView = findViewById(R.id.YTViews);
|
||||
//textView.setText(FINAL_URL);
|
||||
requestQueue.add(oEmbedRequest);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public void ErrorDownloading()
|
||||
{
|
||||
final TextView textViewDislikes = findViewById(R.id.YTDislikes);
|
||||
final TextView textViewLikes = findViewById(R.id.YTLikes);
|
||||
final TextView textViewViews = findViewById(R.id.YTViews);
|
||||
final TextView textViewVideoLink = findViewById(R.id.YTVideoLink);
|
||||
final TextView textViewRatio = findViewById(R.id.YTRatio);
|
||||
final TextView videoTitle = findViewById(R.id.videoTitle);
|
||||
|
||||
textViewDislikes.setText("Error Downloading!");
|
||||
textViewLikes.setText("Error Downloading!");
|
||||
textViewRatio.setText("Error Downloading!");
|
||||
textViewViews.setText("Error Downloading!");
|
||||
textViewVideoLink.setText("Error Downloading!");
|
||||
textViewVideoLink.setText("Unknown Title");
|
||||
|
||||
}
|
||||
|
||||
public String AddComma(String number)
|
||||
{
|
||||
double parsedNumber = Double.parseDouble(number);
|
||||
DecimalFormat formatter = new DecimalFormat("#,###");
|
||||
number = formatter.format(parsedNumber);
|
||||
return number;
|
||||
}
|
||||
|
||||
public void ClickReturnYouTubeDislikeLink(View view)
|
||||
{
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://returnyoutubedislike.com/"));
|
||||
|
@ -11,7 +11,7 @@
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="417dp"
|
||||
android:layout_marginTop="336dp"
|
||||
android:minHeight="48dp"
|
||||
android:onClick="ClickReturnYouTubeDislikeLink"
|
||||
android:text="Thanks to returnyoutubedislike.com"
|
||||
@ -23,14 +23,15 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/YTDislikes"
|
||||
android:layout_width="199dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_width="201dp"
|
||||
android:layout_height="61dp"
|
||||
android:layout_marginStart="172dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginEnd="181dp"
|
||||
android:text="Downloading Data"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.428"
|
||||
app:layout_constraintHorizontal_bias="0.422"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
@ -39,9 +40,24 @@
|
||||
android:layout_width="201dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginStart="172dp"
|
||||
android:layout_marginTop="128dp"
|
||||
android:layout_marginTop="92dp"
|
||||
android:layout_marginEnd="181dp"
|
||||
android:text="Downloading Data"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.419"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/YTRatio"
|
||||
android:layout_width="201dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginStart="172dp"
|
||||
android:layout_marginTop="160dp"
|
||||
android:layout_marginEnd="181dp"
|
||||
android:text="Downloading Data"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.419"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
@ -52,24 +68,26 @@
|
||||
android:layout_width="201dp"
|
||||
android:layout_height="59dp"
|
||||
android:layout_marginStart="172dp"
|
||||
android:layout_marginTop="216dp"
|
||||
android:layout_marginTop="228dp"
|
||||
android:layout_marginEnd="181dp"
|
||||
android:text="Downloading Data"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.435"
|
||||
app:layout_constraintHorizontal_bias="0.419"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/YTVideoLink"
|
||||
android:layout_width="300dp"
|
||||
android:layout_height="61dp"
|
||||
android:layout_width="286dp"
|
||||
android:layout_height="65dp"
|
||||
android:layout_marginStart="172dp"
|
||||
android:layout_marginTop="296dp"
|
||||
android:layout_marginEnd="181dp"
|
||||
android:text="Downloading Data"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.256"
|
||||
app:layout_constraintHorizontal_bias="0.263"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
@ -92,11 +110,26 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="27dp"
|
||||
android:layout_marginTop="85dp"
|
||||
android:layout_marginEnd="48dp"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginEnd="33dp"
|
||||
android:text="Likes:"
|
||||
android:textColor="@android:color/holo_green_dark"
|
||||
app:layout_constraintEnd_toStartOf="@+id/YTLikes"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView3" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="27dp"
|
||||
android:layout_marginTop="116dp"
|
||||
android:layout_marginEnd="33dp"
|
||||
android:text="Ratio:"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toStartOf="@+id/YTLikes"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView3" />
|
||||
|
||||
@ -105,10 +138,10 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="27dp"
|
||||
android:layout_marginTop="68dp"
|
||||
android:layout_marginEnd="45dp"
|
||||
android:text="Views"
|
||||
android:textColor="@android:color/white"
|
||||
android:layout_marginTop="116dp"
|
||||
android:layout_marginEnd="33dp"
|
||||
android:text="Views:"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toStartOf="@+id/YTViews"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
@ -119,12 +152,38 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="27dp"
|
||||
android:layout_marginTop="148dp"
|
||||
android:layout_marginEnd="45dp"
|
||||
android:layout_marginTop="184dp"
|
||||
android:layout_marginEnd="33dp"
|
||||
android:text="Video Link:"
|
||||
android:textColor="@android:color/white"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
app:layout_constraintEnd_toStartOf="@+id/YTViews"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
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>
|
@ -4,26 +4,30 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#151515"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/YTTextBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="326dp"
|
||||
android:layout_height="87dp"
|
||||
android:layout_marginStart="101dp"
|
||||
android:layout_marginTop="76dp"
|
||||
android:layout_marginTop="100dp"
|
||||
android:layout_marginEnd="100dp"
|
||||
android:backgroundTint="@android:color/holo_red_dark"
|
||||
android:ems="10"
|
||||
android:inputType="textPersonName"
|
||||
android:inputType="textWebEditText"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
android:textColorHint="@android:color/holo_green_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.508"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="YouTube Link:" />
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/sendYTQueryButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="136dp"
|
||||
android:layout_height="71dp"
|
||||
android:layout_marginStart="105dp"
|
||||
android:layout_marginTop="27dp"
|
||||
android:layout_marginEnd="105dp"
|
||||
@ -32,4 +36,19 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/YTTextBox" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView6"
|
||||
android:layout_width="245dp"
|
||||
android:layout_height="57dp"
|
||||
android:layout_marginStart="42dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginEnd="124dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="Youtube Link"
|
||||
android:textColor="@android:color/primary_text_dark"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -5,7 +5,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
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
|
||||
// in the individual module build.gradle files
|
||||
|
19
fastlane/metadata/android/en-US/full_description.txt
Normal file
19
fastlane/metadata/android/en-US/full_description.txt
Normal file
@ -0,0 +1,19 @@
|
||||
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.
|
||||
|
||||
When you open the app you are presented with a text box, where you can enter a youtube url and you will be presented with the given videos stats.
|
||||
|
||||
You can also click the 'Share' button inside the official youtube app, and choose 'Show Youtube Dislikes' which will open the app on the information site for that video.
|
||||
|
||||
If possible use the desktop browser extension, as you will be contributing to the project with your dislike data, and not just leeching it, helping everyone get more accurate results.
|
||||
|
||||
I want to thank returnyoutubedislike.com for making an awesome tool, i just wanted to make it available for mobile as well.
|
||||
|
||||
This app is free and open source (it is licenced under the GNU GPLv3).
|
||||
|
||||
If you want to donate, please redirect all donations to https://returnyoutubedislike.com/donate as they are more deserving than i.
|
||||
|
||||
But if you really want to, you can donate some Monero: 88cPx6Gzv5RWRRJLstUt6hACF1BRKPp1RMka1ukyu2iuHT7iqzkNfMogYq3YdDAC8AAYRqmqQMkCgBXiwdD5Dvqw3LsPGLU
|
||||
|
||||
This is in no way affilliated with the official project
|
BIN
fastlane/metadata/android/en-US/images/featureGraphic.png
Normal file
BIN
fastlane/metadata/android/en-US/images/featureGraphic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot01.png
Executable file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot01.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot02.png
Executable file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot02.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot03.png
Executable file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot03.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot04.png
Executable file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot04.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 310 KiB |
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
@ -0,0 +1 @@
|
||||
Bring back Youtube Dislikes for Android
|
1
fastlane/metadata/android/en-US/title.txt
Normal file
1
fastlane/metadata/android/en-US/title.txt
Normal file
@ -0,0 +1 @@
|
||||
Show Youtube Dislikes
|
1
gradle/wrapper/gradle-wrapper.jar.sha256
vendored
Normal file
1
gradle/wrapper/gradle-wrapper.jar.sha256
vendored
Normal file
@ -0,0 +1 @@
|
||||
e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Sat Jan 01 22:38:49 CET 2022
|
||||
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
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
Loading…
Reference in New Issue
Block a user