mirror of
https://github.com/TeamNewPipe/NewPipe.git
synced 2024-11-24 20:15:16 +01:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
20c2426128
@ -13,6 +13,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<hr />
|
<hr />
|
||||||
<p align="center"><a href="#screenshots">Screenshots</a> • <a href="#description">Description</a> • <a href="#features">Features</a> • <a href="#contribution">Contribution</a> • <a href="#donate">Donate</a> • <a href="#license">License</a></p>
|
<p align="center"><a href="#screenshots">Screenshots</a> • <a href="#description">Description</a> • <a href="#features">Features</a> • <a href="#contribution">Contribution</a> • <a href="#donate">Donate</a> • <a href="#license">License</a></p>
|
||||||
|
<p align="center"><a href="https://newpipe.schabi.org">Website</a> • <a href="https://newpipe.schabi.org/blog/">Blog</a> • <a href="https://newpipe.schabi.org/press/">Press</a></p>
|
||||||
<hr />
|
<hr />
|
||||||
WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.
|
WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ android {
|
|||||||
applicationId "org.schabi.newpipe"
|
applicationId "org.schabi.newpipe"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 27
|
targetSdkVersion 27
|
||||||
versionCode 42
|
versionCode 43
|
||||||
versionName "0.11.1"
|
versionName "0.11.2"
|
||||||
|
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
@ -47,21 +47,24 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ext {
|
||||||
|
supportLibVersion = '27.0.2'
|
||||||
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2') {
|
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2') {
|
||||||
exclude module: 'support-annotations'
|
exclude module: 'support-annotations'
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:17ce9f537e8df'
|
implementation 'com.github.TeamNewPipe:NewPipeExtractor:044b8fe32f47e28'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
testImplementation 'org.mockito:mockito-core:1.10.19'
|
testImplementation 'org.mockito:mockito-core:1.10.19'
|
||||||
|
|
||||||
implementation 'com.android.support:appcompat-v7:27.0.1'
|
implementation "com.android.support:appcompat-v7:$supportLibVersion"
|
||||||
implementation 'com.android.support:support-v4:27.0.1'
|
implementation "com.android.support:support-v4:$supportLibVersion"
|
||||||
implementation 'com.android.support:design:27.0.1'
|
implementation "com.android.support:design:$supportLibVersion"
|
||||||
implementation 'com.android.support:recyclerview-v7:27.0.1'
|
implementation "com.android.support:recyclerview-v7:$supportLibVersion"
|
||||||
implementation 'com.android.support:preference-v14:27.0.1'
|
implementation "com.android.support:preference-v14:$supportLibVersion"
|
||||||
|
|
||||||
implementation 'com.google.code.gson:gson:2.8.2'
|
implementation 'com.google.code.gson:gson:2.8.2'
|
||||||
implementation 'ch.acra:acra:4.9.2'
|
implementation 'ch.acra:acra:4.9.2'
|
||||||
@ -76,7 +79,7 @@ dependencies {
|
|||||||
debugImplementation 'com.facebook.stetho:stetho-urlconnection:1.5.0'
|
debugImplementation 'com.facebook.stetho:stetho-urlconnection:1.5.0'
|
||||||
debugImplementation 'com.android.support:multidex:1.0.2'
|
debugImplementation 'com.android.support:multidex:1.0.2'
|
||||||
|
|
||||||
implementation 'io.reactivex.rxjava2:rxjava:2.1.6'
|
implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
|
||||||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
|
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
|
||||||
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
|
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
|
||||||
|
|
||||||
|
@ -546,7 +546,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TextUtils.isEmpty(info.getUploaderAvatarUrl())) {
|
if (!TextUtils.isEmpty(info.getUploaderAvatarUrl())) {
|
||||||
imageLoader.displayImage(info.getUploaderAvatarUrl(), uploaderThumb, DISPLAY_AVATAR_OPTIONS);
|
imageLoader.displayImage(info.getUploaderAvatarUrl(), uploaderThumb, DISPLAY_AVATAR_OPTIONS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import android.preference.PreferenceManager;
|
|||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@ -153,7 +154,11 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Single<ListExtractor.NextItemsResult> loadMoreItemsLogic() {
|
public Single<ListExtractor.NextItemsResult> loadMoreItemsLogic() {
|
||||||
return ExtractorHelper.getMoreKioskItems(serviceId, url, currentNextItemsUrl);
|
String contentCountry = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences(activity)
|
||||||
|
.getString(getString(R.string.search_language_key),
|
||||||
|
getString(R.string.default_language_value));
|
||||||
|
return ExtractorHelper.getMoreKioskItems(serviceId, url, currentNextItemsUrl, contentCountry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -177,7 +177,7 @@ public final class BackgroundPlayer extends Service {
|
|||||||
|
|
||||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
|
||||||
.setOngoing(true)
|
.setOngoing(true)
|
||||||
.setSmallIcon(R.drawable.ic_play_circle_filled_white_24dp)
|
.setSmallIcon(R.drawable.ic_newpipe_triangle_white)
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
.setCustomContentView(notRemoteView)
|
.setCustomContentView(notRemoteView)
|
||||||
.setCustomBigContentView(bigNotRemoteView);
|
.setCustomBigContentView(bigNotRemoteView);
|
||||||
|
@ -44,6 +44,7 @@ import android.view.Gravity;
|
|||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.widget.ImageButton;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
@ -275,7 +276,7 @@ public final class PopupVideoPlayer extends Service {
|
|||||||
|
|
||||||
return new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
|
return new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
|
||||||
.setOngoing(true)
|
.setOngoing(true)
|
||||||
.setSmallIcon(R.drawable.ic_play_arrow_white)
|
.setSmallIcon(R.drawable.ic_newpipe_triangle_white)
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
.setContent(notRemoteView);
|
.setContent(notRemoteView);
|
||||||
}
|
}
|
||||||
@ -401,6 +402,7 @@ public final class PopupVideoPlayer extends Service {
|
|||||||
|
|
||||||
protected class VideoPlayerImpl extends VideoPlayer {
|
protected class VideoPlayerImpl extends VideoPlayer {
|
||||||
private TextView resizingIndicator;
|
private TextView resizingIndicator;
|
||||||
|
private ImageButton fullScreenButton;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleIntent(Intent intent) {
|
public void handleIntent(Intent intent) {
|
||||||
@ -418,6 +420,13 @@ public final class PopupVideoPlayer extends Service {
|
|||||||
public void initViews(View rootView) {
|
public void initViews(View rootView) {
|
||||||
super.initViews(rootView);
|
super.initViews(rootView);
|
||||||
resizingIndicator = rootView.findViewById(R.id.resizing_indicator);
|
resizingIndicator = rootView.findViewById(R.id.resizing_indicator);
|
||||||
|
fullScreenButton = rootView.findViewById(R.id.fullScreenButton);
|
||||||
|
fullScreenButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
onFullScreenButtonClicked();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -75,7 +75,13 @@ import static org.schabi.newpipe.util.AnimationUtils.animateView;
|
|||||||
* @author mauriciocolli
|
* @author mauriciocolli
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"WeakerAccess", "unused"})
|
@SuppressWarnings({"WeakerAccess", "unused"})
|
||||||
public abstract class VideoPlayer extends BasePlayer implements SimpleExoPlayer.VideoListener, SeekBar.OnSeekBarChangeListener, View.OnClickListener, Player.EventListener, PopupMenu.OnMenuItemClickListener, PopupMenu.OnDismissListener {
|
public abstract class VideoPlayer extends BasePlayer
|
||||||
|
implements SimpleExoPlayer.VideoListener,
|
||||||
|
SeekBar.OnSeekBarChangeListener,
|
||||||
|
View.OnClickListener,
|
||||||
|
Player.EventListener,
|
||||||
|
PopupMenu.OnMenuItemClickListener,
|
||||||
|
PopupMenu.OnDismissListener {
|
||||||
public static final boolean DEBUG = BasePlayer.DEBUG;
|
public static final boolean DEBUG = BasePlayer.DEBUG;
|
||||||
public final String TAG;
|
public final String TAG;
|
||||||
|
|
||||||
|
@ -143,16 +143,16 @@ public final class ExtractorHelper {
|
|||||||
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<KioskInfo>() {
|
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<KioskInfo>() {
|
||||||
@Override
|
@Override
|
||||||
public KioskInfo call() throws Exception {
|
public KioskInfo call() throws Exception {
|
||||||
return KioskInfo.getInfo(NewPipe.getService(serviceId), url, contentCountry);
|
return KioskInfo.getInfo(NewPipe.getService(serviceId), url, toUpperCase(contentCountry));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Single<NextItemsResult> getMoreKioskItems(final int serviceId, final String url, final String nextStreamsUrl) {
|
public static Single<NextItemsResult> getMoreKioskItems(final int serviceId, final String url, final String nextStreamsUrl, final String contentCountry) {
|
||||||
return Single.fromCallable(new Callable<NextItemsResult>() {
|
return Single.fromCallable(new Callable<NextItemsResult>() {
|
||||||
@Override
|
@Override
|
||||||
public NextItemsResult call() throws Exception {
|
public NextItemsResult call() throws Exception {
|
||||||
return KioskInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl);
|
return KioskInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl, toUpperCase(contentCountry));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -267,4 +267,17 @@ public final class ExtractorHelper {
|
|||||||
public static boolean isInterruptedCaused(Throwable throwable) {
|
public static boolean isInterruptedCaused(Throwable throwable) {
|
||||||
return ExtractorHelper.hasExactCauseThrowable(throwable, InterruptedIOException.class, InterruptedException.class);
|
return ExtractorHelper.hasExactCauseThrowable(throwable, InterruptedIOException.class, InterruptedException.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String toUpperCase(String value) {
|
||||||
|
StringBuilder sb = new StringBuilder(value);
|
||||||
|
for (int index = 0; index < sb.length(); index++) {
|
||||||
|
char c = sb.charAt(index);
|
||||||
|
if (Character.isLowerCase(c)) {
|
||||||
|
sb.setCharAt(index, Character.toUpperCase(c));
|
||||||
|
} else {
|
||||||
|
sb.setCharAt(index, Character.toLowerCase(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.schabi.newpipe.util;
|
package org.schabi.newpipe.util;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -45,6 +46,8 @@ import org.schabi.newpipe.settings.SettingsActivity;
|
|||||||
public class NavigationHelper {
|
public class NavigationHelper {
|
||||||
public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag";
|
public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag";
|
||||||
|
|
||||||
|
public static final int PENDING_INTENT_OPEN_PLAYER_ACTIVITY = 1546;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Players
|
// Players
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
@ -269,13 +272,24 @@ public class NavigationHelper {
|
|||||||
openServicePlayerControl(context, PopupVideoPlayerActivity.class);
|
openServicePlayerControl(context, PopupVideoPlayerActivity.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void openServicePlayerControl(final Context context, final Class clazz) {
|
private static void openServicePlayerControl(final Context context, final Class activityClass) {
|
||||||
final Intent intent = new Intent(context, clazz);
|
Intent intent = getServicePlayerControlIntent(context, activityClass);
|
||||||
|
context.startActivity(intent);
|
||||||
|
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Intent getServicePlayerControlIntent(final Context context, final Class activityClass) {
|
||||||
|
final Intent intent = new Intent(context, activityClass);
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
}
|
}
|
||||||
context.startActivity(intent);
|
return intent;
|
||||||
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
}
|
||||||
|
|
||||||
|
public static PendingIntent getServicePlayerControlPendingIntent(final Context context, final Class activityClass) {
|
||||||
|
Intent intent = getServicePlayerControlIntent(context, activityClass);
|
||||||
|
PendingIntent pIntent = PendingIntent.getActivity(context, PENDING_INTENT_OPEN_PLAYER_ACTIVITY, intent, 0);
|
||||||
|
return pIntent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
|
BIN
app/src/main/res/drawable-hdpi/ic_newpipe_triangle_white.png
Normal file
BIN
app/src/main/res/drawable-hdpi/ic_newpipe_triangle_white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 570 B |
BIN
app/src/main/res/drawable-mdpi/ic_newpipe_triangle_white.png
Normal file
BIN
app/src/main/res/drawable-mdpi/ic_newpipe_triangle_white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 328 B |
BIN
app/src/main/res/drawable-xhdpi/ic_newpipe_triangle_white.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_newpipe_triangle_white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 628 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_newpipe_triangle_white.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_newpipe_triangle_white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/ic_newpipe_triangle_white.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/ic_newpipe_triangle_white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
@ -11,8 +11,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
android:background="@color/background_notification_color"
|
android:background="@color/background_notification_color"
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="128dp"
|
android:layout_height="128dp"
|
||||||
android:background="@color/background_notification_color"
|
android:background="@color/background_notification_color"
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@
|
|||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:background="#00ffffff"
|
android:background="#00ffffff"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:src="@drawable/ic_fullscreen_white"
|
android:src="@drawable/ic_fullscreen_white"
|
||||||
tools:ignore="ContentDescription,RtlHardcoded"/>
|
tools:ignore="ContentDescription,RtlHardcoded"/>
|
||||||
|
565
assets/new_pipe_icon_5_beta2.svg
Normal file
565
assets/new_pipe_icon_5_beta2.svg
Normal file
@ -0,0 +1,565 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
viewBox="0 0 192 192"
|
||||||
|
height="204.8"
|
||||||
|
width="204.8"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="new_pipe_icon_5_beta2.svg"
|
||||||
|
inkscape:export-filename="/home/the-scrabi/Projects/NewPipe/assets/new_pipe_icon_5.png"
|
||||||
|
inkscape:export-xdpi="120"
|
||||||
|
inkscape:export-ydpi="120">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1021"
|
||||||
|
id="namedview4149"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="3.6307263"
|
||||||
|
inkscape:cx="129.93323"
|
||||||
|
inkscape:cy="102.41566"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4447">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.1"
|
||||||
|
offset="0"
|
||||||
|
id="stop4449" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1"
|
||||||
|
id="stop4451" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4454"
|
||||||
|
width="1.4"
|
||||||
|
height="1.4"
|
||||||
|
x="-0.2"
|
||||||
|
y="-0.2">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.427451"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4456" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4458" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="10.9"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4460" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="7"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4462" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4464" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4777">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4779" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4781" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="5.82011"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4783" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5.6"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4785" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
id="feComposite4787" />
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphicAlpha"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||||
|
id="feColorMatrix4789" />
|
||||||
|
<feFlood
|
||||||
|
id="feFlood4791"
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
in="fbSourceGraphic" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4793"
|
||||||
|
in2="fbSourceGraphic"
|
||||||
|
in="flood"
|
||||||
|
operator="in"
|
||||||
|
result="composite1" />
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur4795"
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="5.8"
|
||||||
|
result="blur" />
|
||||||
|
<feOffset
|
||||||
|
id="feOffset4797"
|
||||||
|
dx="0"
|
||||||
|
dy="5.6"
|
||||||
|
result="offset" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4799"
|
||||||
|
in2="offset"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
operator="over"
|
||||||
|
result="composite2" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4885">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4887" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4889" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.9"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4891" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="2.54709"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4893" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
id="feComposite4895" />
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphicAlpha"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||||
|
id="feColorMatrix4897" />
|
||||||
|
<feFlood
|
||||||
|
id="feFlood4899"
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
in="fbSourceGraphic" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4901"
|
||||||
|
in2="fbSourceGraphic"
|
||||||
|
in="flood"
|
||||||
|
operator="in"
|
||||||
|
result="composite1" />
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur4903"
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.9"
|
||||||
|
result="blur" />
|
||||||
|
<feOffset
|
||||||
|
id="feOffset4905"
|
||||||
|
dx="0"
|
||||||
|
dy="2.5"
|
||||||
|
result="offset" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4907"
|
||||||
|
in2="offset"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
operator="over"
|
||||||
|
result="composite2" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4257">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4259" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4261" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.9"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4263" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5.02645"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4265" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
id="feComposite4267" />
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphicAlpha"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||||
|
id="feColorMatrix4269" />
|
||||||
|
<feFlood
|
||||||
|
id="feFlood4271"
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
in="fbSourceGraphic" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4273"
|
||||||
|
in2="fbSourceGraphic"
|
||||||
|
in="flood"
|
||||||
|
operator="in"
|
||||||
|
result="composite1" />
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur4275"
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.9"
|
||||||
|
result="blur" />
|
||||||
|
<feOffset
|
||||||
|
id="feOffset4277"
|
||||||
|
dx="0"
|
||||||
|
dy="5"
|
||||||
|
result="offset" />
|
||||||
|
<feComposite
|
||||||
|
id="feComposite4279"
|
||||||
|
in2="offset"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
operator="over"
|
||||||
|
result="composite2" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4192">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4194" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4196" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.7"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4198" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4200" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4202" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4349">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4351" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4353" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="7.2"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4355" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4357" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4359" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4361">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4363" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4365" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="5.3"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4367" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4369" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4371" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4481">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4483" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4485" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="5"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4487" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="5"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4489" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4491" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4433">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.2"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4435" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4437" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4439" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="4"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4441" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4443" />
|
||||||
|
</filter>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4447"
|
||||||
|
id="radialGradient4453"
|
||||||
|
cx="0.56012386"
|
||||||
|
cy="0.35701406"
|
||||||
|
fx="0.56012386"
|
||||||
|
fy="0.35701406"
|
||||||
|
r="88"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.00132321,2.1587518,-2.1815784,0.00133718,1.1369825,-1.4250071)" />
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB;"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter4447">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.498039"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood4449" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite4451" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="1"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur4453" />
|
||||||
|
<feOffset
|
||||||
|
dx="0"
|
||||||
|
dy="0"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset4455" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite4457" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ff7575;fill-opacity:1;stroke:none;stroke-width:17.10300064;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4144-9"
|
||||||
|
r="88"
|
||||||
|
cy="104"
|
||||||
|
cx="88"
|
||||||
|
d=""
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ff5252;fill-opacity:1;stroke:none;stroke-width:17.10300064;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4144-6"
|
||||||
|
cx="88"
|
||||||
|
cy="104"
|
||||||
|
r="0" />
|
||||||
|
<circle
|
||||||
|
style="opacity:1;fill:#ff7575;fill-opacity:1;stroke:none;stroke-width:17.10300064;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4433)"
|
||||||
|
id="path4144-67"
|
||||||
|
cx="96"
|
||||||
|
cy="96"
|
||||||
|
r="88" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#cc4242;fill-opacity:1;stroke:none;stroke-width:17.10300064;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4433)"
|
||||||
|
id="path4144-5"
|
||||||
|
sodipodi:type="arc"
|
||||||
|
sodipodi:cx="96"
|
||||||
|
sodipodi:cy="96"
|
||||||
|
sodipodi:rx="88"
|
||||||
|
sodipodi:ry="88"
|
||||||
|
sodipodi:start="0"
|
||||||
|
sodipodi:end="3.1387981"
|
||||||
|
sodipodi:open="true"
|
||||||
|
d="M 184,96 A 88,88 0 0 1 96.12296,183.99991 88,88 0 0 1 8.0003436,96.24592" />
|
||||||
|
<ellipse
|
||||||
|
style="fill:#cd201f;fill-opacity:1;stroke:none;stroke-width:17.10300064;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4433)"
|
||||||
|
id="path4144"
|
||||||
|
cx="96"
|
||||||
|
cy="96"
|
||||||
|
rx="88"
|
||||||
|
ry="87" />
|
||||||
|
<circle
|
||||||
|
style="opacity:1;fill:url(#radialGradient4453);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4445"
|
||||||
|
cx="96.001984"
|
||||||
|
cy="94.989021"
|
||||||
|
r="88" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4433)"
|
||||||
|
d="m 68.234817,154.58953 17.847497,-11.37613 0.373296,-75.405673 45.92471,27.26706 -33.232668,19.162923 0,21.92836 L 168.18191,95.074787 68.141493,36.280281 Z"
|
||||||
|
id="path4234"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccccccc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:37.49999619px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4447)"
|
||||||
|
x="-141.68971"
|
||||||
|
y="60.340179"
|
||||||
|
id="text4215"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
transform="matrix(0.003067,-0.9999953,0.9999953,0.003067,0,0)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4217"
|
||||||
|
x="-141.68971"
|
||||||
|
y="60.340179">BETA</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 16 KiB |
@ -6,7 +6,7 @@ buildscript {
|
|||||||
google()
|
google()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.0.0'
|
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||||
|
|
||||||
// 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
|
||||||
|
Loading…
Reference in New Issue
Block a user