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.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.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.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.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-->
|
||||
<!-- <permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <!– Used for getting if vlc is installed –>-->
|
||||
|
||||
<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="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 –> -->
|
||||
<!-- Fixes android tv fuckery -->
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
|
@ -36,6 +35,7 @@
|
|||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:targetApi="o">
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
|
||||
android:value="com.lagradost.cloudstream3.utils.CastOptionsProvider" />
|
||||
|
@ -53,6 +53,7 @@
|
|||
android:supportsPictureInPicture="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:scheme="content" />
|
||||
|
@ -62,7 +63,9 @@
|
|||
<!-- I dont think this label can be translated, but idk -->
|
||||
<intent-filter android:label="@string/play_with_app_name">
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
@ -84,7 +87,6 @@
|
|||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
|
@ -114,6 +116,10 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".ui.EasterEggMonke"
|
||||
android:exported="true" />
|
||||
|
||||
<receiver
|
||||
android:name=".receivers.VideoDownloadRestartReceiver"
|
||||
android:enabled="false"
|
||||
|
@ -122,6 +128,7 @@
|
|||
<action android:name="restart_service" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<service
|
||||
android:name=".services.VideoDownloadService"
|
||||
android:enabled="true"
|
||||
|
@ -142,4 +149,5 @@
|
|||
android:resource="@xml/provider_paths" />
|
||||
</provider>
|
||||
</application>
|
||||
|
||||
</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.normalSafeApiCall
|
||||
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.setUpToolbar
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
|
||||
|
@ -271,6 +272,10 @@ class SettingsGeneral : PreferenceFragmentCompat() {
|
|||
pref.setOnPreferenceClickListener {
|
||||
try {
|
||||
SettingsFragment.beneneCount++
|
||||
if (SettingsFragment.beneneCount%20 == 0) {
|
||||
val intent = Intent(context, EasterEggMonke::class.java)
|
||||
startActivity(intent)
|
||||
}
|
||||
settingsManager.edit().putInt(
|
||||
getString(R.string.benene_count),
|
||||
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