mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
100% did not add an easter egg legit no scam 😳
This commit is contained in:
parent
7eb0c83dc5
commit
46846ab3cc
4 changed files with 163 additions and 7 deletions
|
@ -6,14 +6,13 @@
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- I dont remember, probs has to do with downloads -->
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- I dont remember, probs has to do with downloads -->
|
||||||
<uses-permission android:name="android.permission.INTERNET" /> <!-- unless you only use cs3 as a player for downloaded stuff, you need this -->
|
<uses-permission android:name="android.permission.INTERNET" /> <!-- unless you only use cs3 as a player for downloaded stuff, you need this -->
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Downloads -->
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Downloads -->
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- Downloads on low api devices-->
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- Downloads on low api devices -->
|
||||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <!-- Plugin API -->
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <!-- Plugin API -->
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- some dependency needs this -->
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- some dependency needs this -->
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- Used for player vertical slide-->
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- Used for player vertical slide -->
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!--Used for app update-->
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- Used for app update -->
|
||||||
<!--<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" /> not used atm, but code exist that requires it that are not run-->
|
<!-- <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" /> not used atm, but code exist that requires it that are not run -->
|
||||||
<!-- <permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <!– Used for getting if vlc is installed –>-->
|
<!-- <permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <!– Used for getting if vlc is installed –> -->
|
||||||
|
|
||||||
<!-- Fixes android tv fuckery -->
|
<!-- Fixes android tv fuckery -->
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.touchscreen"
|
android:name="android.hardware.touchscreen"
|
||||||
|
@ -36,6 +35,7 @@
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
tools:targetApi="o">
|
tools:targetApi="o">
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
|
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
|
||||||
android:value="com.lagradost.cloudstream3.utils.CastOptionsProvider" />
|
android:value="com.lagradost.cloudstream3.utils.CastOptionsProvider" />
|
||||||
|
@ -53,6 +53,7 @@
|
||||||
android:supportsPictureInPicture="true">
|
android:supportsPictureInPicture="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
<data android:scheme="content" />
|
<data android:scheme="content" />
|
||||||
|
@ -62,7 +63,9 @@
|
||||||
<!-- I dont think this label can be translated, but idk -->
|
<!-- I dont think this label can be translated, but idk -->
|
||||||
<intent-filter android:label="@string/play_with_app_name">
|
<intent-filter android:label="@string/play_with_app_name">
|
||||||
<action android:name="android.intent.action.SEND" />
|
<action android:name="android.intent.action.SEND" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
<data android:mimeType="*/*" />
|
<data android:mimeType="*/*" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
@ -84,7 +87,6 @@
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
|
@ -114,6 +116,10 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".ui.EasterEggMonke"
|
||||||
|
android:exported="true" />
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".receivers.VideoDownloadRestartReceiver"
|
android:name=".receivers.VideoDownloadRestartReceiver"
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
|
@ -122,6 +128,7 @@
|
||||||
<action android:name="restart_service" />
|
<action android:name="restart_service" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".services.VideoDownloadService"
|
android:name=".services.VideoDownloadService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
@ -142,4 +149,5 @@
|
||||||
android:resource="@xml/provider_paths" />
|
android:resource="@xml/provider_paths" />
|
||||||
</provider>
|
</provider>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
|
@ -0,0 +1,96 @@
|
||||||
|
// https://github.com/googlecodelabs/android-kotlin-animation-property-animation/tree/master/begin
|
||||||
|
|
||||||
|
package com.lagradost.cloudstream3.ui
|
||||||
|
|
||||||
|
import android.animation.Animator
|
||||||
|
import android.animation.AnimatorListenerAdapter
|
||||||
|
import android.animation.AnimatorSet
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
|
import android.view.View
|
||||||
|
import android.view.animation.AccelerateInterpolator
|
||||||
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.appcompat.widget.AppCompatImageView
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import com.lagradost.cloudstream3.R
|
||||||
|
import kotlinx.android.synthetic.main.activity_easter_egg_monke.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class EasterEggMonke : AppCompatActivity() {
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setContentView(R.layout.activity_easter_egg_monke)
|
||||||
|
|
||||||
|
val handler = Handler(mainLooper)
|
||||||
|
lateinit var runnable: Runnable
|
||||||
|
runnable = Runnable {
|
||||||
|
shower()
|
||||||
|
handler.postDelayed(runnable, 300)
|
||||||
|
}
|
||||||
|
handler.postDelayed(runnable, 1000)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun shower() {
|
||||||
|
|
||||||
|
val containerW = frame.width
|
||||||
|
val containerH = frame.height
|
||||||
|
var starW: Float = monke.width.toFloat()
|
||||||
|
var starH: Float = monke.height.toFloat()
|
||||||
|
|
||||||
|
val newStar = AppCompatImageView(this)
|
||||||
|
val idx = (monkeys.size * Math.random()).toInt()
|
||||||
|
newStar.setImageResource(monkeys[idx])
|
||||||
|
newStar.isVisible = true
|
||||||
|
newStar.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
FrameLayout.LayoutParams.WRAP_CONTENT)
|
||||||
|
frame.addView(newStar)
|
||||||
|
|
||||||
|
newStar.scaleX = Math.random().toFloat() * 1.5f + newStar.scaleX
|
||||||
|
newStar.scaleY = newStar.scaleX
|
||||||
|
starW *= newStar.scaleX
|
||||||
|
starH *= newStar.scaleY
|
||||||
|
|
||||||
|
newStar.translationX = Math.random().toFloat() * containerW - starW / 2
|
||||||
|
|
||||||
|
val mover = ObjectAnimator.ofFloat(newStar, View.TRANSLATION_Y, -starH, containerH + starH)
|
||||||
|
mover.interpolator = AccelerateInterpolator(1f)
|
||||||
|
|
||||||
|
val rotator = ObjectAnimator.ofFloat(newStar, View.ROTATION,
|
||||||
|
(Math.random() * 1080).toFloat())
|
||||||
|
rotator.interpolator = LinearInterpolator()
|
||||||
|
|
||||||
|
val set = AnimatorSet()
|
||||||
|
set.playTogether(mover, rotator)
|
||||||
|
set.duration = (Math.random() * 1500 + 2500).toLong()
|
||||||
|
|
||||||
|
set.addListener(object : AnimatorListenerAdapter() {
|
||||||
|
override fun onAnimationEnd(animation: Animator?) {
|
||||||
|
frame.removeView(newStar)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
set.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val monkeys = listOf(
|
||||||
|
R.drawable.monke_benene,
|
||||||
|
R.drawable.monke_burrito,
|
||||||
|
R.drawable.monke_coco,
|
||||||
|
R.drawable.monke_cookie,
|
||||||
|
R.drawable.monke_flusdered,
|
||||||
|
R.drawable.monke_funny,
|
||||||
|
R.drawable.monke_like,
|
||||||
|
R.drawable.monke_party,
|
||||||
|
R.drawable.monke_sob,
|
||||||
|
R.drawable.monke_drink,
|
||||||
|
R.drawable.benene,
|
||||||
|
R.drawable.ic_launcher_foreground
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.app
|
||||||
import com.lagradost.cloudstream3.mvvm.logError
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
||||||
import com.lagradost.cloudstream3.network.initClient
|
import com.lagradost.cloudstream3.network.initClient
|
||||||
|
import com.lagradost.cloudstream3.ui.EasterEggMonke
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
|
||||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
|
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
|
||||||
|
@ -271,6 +272,10 @@ class SettingsGeneral : PreferenceFragmentCompat() {
|
||||||
pref.setOnPreferenceClickListener {
|
pref.setOnPreferenceClickListener {
|
||||||
try {
|
try {
|
||||||
SettingsFragment.beneneCount++
|
SettingsFragment.beneneCount++
|
||||||
|
if (SettingsFragment.beneneCount%20 == 0) {
|
||||||
|
val intent = Intent(context, EasterEggMonke::class.java)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
settingsManager.edit().putInt(
|
settingsManager.edit().putInt(
|
||||||
getString(R.string.benene_count),
|
getString(R.string.benene_count),
|
||||||
SettingsFragment.beneneCount
|
SettingsFragment.beneneCount
|
||||||
|
|
47
app/src/main/res/layout/activity_easter_egg_monke.xml
Normal file
47
app/src/main/res/layout/activity_easter_egg_monke.xml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (C) 2019 The Android Open Source Project
|
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
~ you may not use this file except in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~ See the License for the specific language governing permissions and
|
||||||
|
~ limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".MainActivity">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/frame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="@color/black"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.0">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/monke"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:scaleX="3"
|
||||||
|
android:scaleY="3"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:srcCompat="@drawable/monke_benene"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Reference in a new issue