[app] Remove weatherView (#418)
This commit is contained in:
parent
a1201ae42b
commit
0facfb958a
|
|
@ -177,8 +177,6 @@ dependencies {
|
|||
implementation("com.caverock:androidsvg-aar:1.4")
|
||||
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
||||
implementation("com.github.bumptech.glide:okhttp3-integration:$glideVersion")
|
||||
implementation("com.github.jinatonic.confetti:confetti:1.1.2")
|
||||
implementation("com.github.MatteoBattilana:WeatherView:2.0.3")
|
||||
implementation("com.google.android.material:material:1.3.0")
|
||||
implementation("com.google.code.gson:gson:2.8.6")
|
||||
implementation("com.takisoft.preferencex:preferencex:1.1.0")
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
package name.mikanoshi.customiuizer.holidays;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.github.jinatonic.confetti.ConfettoGenerator;
|
||||
import com.github.jinatonic.confetti.confetto.Confetto;
|
||||
import com.github.matteobattilana.weather.PrecipType;
|
||||
import com.github.matteobattilana.weather.confetti.ConfettoInfo;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class FlowerGenerator implements ConfettoGenerator {
|
||||
private final ConfettoInfo confettoInfo;
|
||||
private final Context context;
|
||||
|
||||
public FlowerGenerator(Context ctx) {
|
||||
super();
|
||||
this.context = ctx;
|
||||
this.confettoInfo = new ConfettoInfo(PrecipType.SNOW);
|
||||
}
|
||||
|
||||
public Confetto generateConfetto(Random random) {
|
||||
return new FlowerParticle(this.context, this.confettoInfo);
|
||||
}
|
||||
|
||||
public final ConfettoInfo getConfettoInfo() {
|
||||
return this.confettoInfo;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
package name.mikanoshi.customiuizer.holidays;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.view.Surface;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.github.jinatonic.confetti.confetto.Confetto;
|
||||
import com.github.matteobattilana.weather.confetti.ConfettoInfo;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import org.lsposed.manager.R;
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
public class FlowerParticle extends Confetto {
|
||||
private final ConfettoInfo confettoInfo;
|
||||
private final Bitmap petal;
|
||||
private float petalScale;
|
||||
private final int[] petals = new int[]{R.drawable.confetti1, R.drawable.confetti1, R.drawable.confetti2, R.drawable.confetti2, R.drawable.confetti3, R.drawable.confetti3, R.drawable.petal};
|
||||
|
||||
FlowerParticle(Context context, ConfettoInfo confettoInfo) {
|
||||
super();
|
||||
this.confettoInfo = confettoInfo;
|
||||
petalScale = 0.6f - (float) Math.random() * 0.15f;
|
||||
petal = BitmapFactory.decodeResource(context.getResources(), petals[new Random().nextInt(petals.length)]);
|
||||
|
||||
int rotation = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
|
||||
if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) petalScale *= 1.5;
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
super.reset();
|
||||
}
|
||||
|
||||
protected void configurePaint(Paint paint) {
|
||||
super.configurePaint(paint);
|
||||
paint.setColor(-1);
|
||||
paint.setAntiAlias(true);
|
||||
}
|
||||
|
||||
protected void drawInternal(Canvas canvas, Matrix matrix, Paint paint, float x, float y, float rotation, float percentageAnimated) {
|
||||
switch (confettoInfo.getPrecipType()) {
|
||||
case CLEAR:
|
||||
break;
|
||||
case SNOW:
|
||||
matrix.postScale(petalScale, petalScale);
|
||||
matrix.postRotate(rotation, petal.getWidth() / 2f, petal.getHeight() / 2f);
|
||||
matrix.postTranslate(x, y);
|
||||
canvas.drawBitmap(petal, matrix, paint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public final ConfettoInfo getConfettoInfo() {
|
||||
return this.confettoInfo;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,118 +1,48 @@
|
|||
/*
|
||||
* This file is part of LSPosed.
|
||||
*
|
||||
* LSPosed is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* LSPosed is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with LSPosed. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright (C) 2021 LSPosed Contributors
|
||||
*/
|
||||
|
||||
package name.mikanoshi.customiuizer.holidays;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.view.Surface;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
|
||||
import com.github.jinatonic.confetti.ConfettiManager;
|
||||
import com.github.jinatonic.confetti.ConfettoGenerator;
|
||||
import com.github.matteobattilana.weather.PrecipType;
|
||||
import com.github.matteobattilana.weather.WeatherView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.lsposed.manager.R;
|
||||
import name.mikanoshi.customiuizer.utils.GravitySensor;
|
||||
|
||||
import name.mikanoshi.customiuizer.utils.Helpers;
|
||||
|
||||
public class HolidayHelper {
|
||||
|
||||
private static WeakReference<WeatherView> weatherView;
|
||||
private static WeakReference<GravitySensor> angleListener;
|
||||
|
||||
public static void setWeatherGenerator(ConfettoGenerator generator) {
|
||||
try {
|
||||
ConfettiManager manager = weatherView.get().getConfettiManager();
|
||||
Field confettoGenerator = ConfettiManager.class.getDeclaredField("confettoGenerator");
|
||||
confettoGenerator.setAccessible(true);
|
||||
confettoGenerator.set(manager, generator);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setup(Activity activity) {
|
||||
Helpers.detectHoliday();
|
||||
|
||||
WeatherView view = activity.findViewById(R.id.weather_view);
|
||||
ImageView header = activity.findViewById(R.id.holiday_header);
|
||||
|
||||
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
weatherView = new WeakReference<>(view);
|
||||
GravitySensor listener = null;
|
||||
if (Helpers.currentHoliday == Helpers.Holidays.NEWYEAR) {
|
||||
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
|
||||
view.setPrecipType(PrecipType.SNOW);
|
||||
view.setSpeed(50);
|
||||
view.setEmissionRate(rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270 ? 8 : 4);
|
||||
view.setFadeOutPercent(0.75f);
|
||||
view.setAngle(0);
|
||||
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
|
||||
lp.height = activity.getResources().getDisplayMetrics().heightPixels / (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270 ? 2 : 3);
|
||||
view.setLayoutParams(lp);
|
||||
setWeatherGenerator(new SnowGenerator(activity));
|
||||
view.resetWeather();
|
||||
view.setVisibility(View.VISIBLE);
|
||||
view.getConfettiManager().setRotationalVelocity(0, 45);
|
||||
|
||||
listener = new GravitySensor(activity, view);
|
||||
listener.setOrientation(rotation);
|
||||
listener.setSpeed(50);
|
||||
listener.start();
|
||||
|
||||
header.setImageResource(R.drawable.newyear_header);
|
||||
header.setVisibility(View.VISIBLE);
|
||||
} else if (Helpers.currentHoliday == Helpers.Holidays.LUNARNEWYEAR) {
|
||||
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
|
||||
view.setPrecipType(PrecipType.SNOW);
|
||||
view.setSpeed(35);
|
||||
view.setEmissionRate(rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270 ? 4 : 2);
|
||||
view.setFadeOutPercent(0.75f);
|
||||
view.setAngle(0);
|
||||
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
|
||||
lp.height = activity.getResources().getDisplayMetrics().heightPixels / (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270 ? 3 : 4);
|
||||
view.setLayoutParams(lp);
|
||||
setWeatherGenerator(new FlowerGenerator(activity));
|
||||
view.resetWeather();
|
||||
view.setVisibility(View.VISIBLE);
|
||||
view.getConfettiManager().setRotationalVelocity(0, 45);
|
||||
|
||||
listener = new GravitySensor(activity, view);
|
||||
listener.setOrientation(rotation);
|
||||
listener.setSpeed(35);
|
||||
listener.start();
|
||||
|
||||
header.setImageResource(R.drawable.lunar_newyear_header);
|
||||
header.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
((ViewGroup) view.getParent()).removeView(view);
|
||||
((ViewGroup) header.getParent()).removeView(header);
|
||||
}
|
||||
angleListener = new WeakReference<>(listener);
|
||||
}
|
||||
|
||||
public static void onPause() {
|
||||
GravitySensor listener = angleListener.get();
|
||||
if (listener != null) listener.onPause();
|
||||
WeatherView view = weatherView.get();
|
||||
if (view != null) view.getConfettiManager().terminate();
|
||||
}
|
||||
|
||||
public static void onResume() {
|
||||
GravitySensor listener = angleListener.get();
|
||||
if (listener != null) listener.onResume();
|
||||
WeatherView view = weatherView.get();
|
||||
if (view != null) view.getConfettiManager().animate();
|
||||
}
|
||||
|
||||
public static void onDestroy() {
|
||||
GravitySensor listener = angleListener.get();
|
||||
if (listener != null) listener.stop();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
package name.mikanoshi.customiuizer.holidays;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.github.jinatonic.confetti.ConfettoGenerator;
|
||||
import com.github.jinatonic.confetti.confetto.Confetto;
|
||||
import com.github.matteobattilana.weather.PrecipType;
|
||||
import com.github.matteobattilana.weather.confetti.ConfettoInfo;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class SnowGenerator implements ConfettoGenerator {
|
||||
private final ConfettoInfo confettoInfo;
|
||||
private final Context context;
|
||||
|
||||
public SnowGenerator(Context ctx) {
|
||||
super();
|
||||
this.context = ctx;
|
||||
this.confettoInfo = new ConfettoInfo(PrecipType.SNOW);
|
||||
}
|
||||
|
||||
public Confetto generateConfetto(Random random) {
|
||||
return new SnowParticle(this.context, this.confettoInfo);
|
||||
}
|
||||
|
||||
public final ConfettoInfo getConfettoInfo() {
|
||||
return this.confettoInfo;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
package name.mikanoshi.customiuizer.holidays;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
|
||||
import com.github.jinatonic.confetti.confetto.Confetto;
|
||||
import com.github.matteobattilana.weather.confetti.ConfettoInfo;
|
||||
|
||||
import org.lsposed.manager.R;
|
||||
|
||||
public class SnowParticle extends Confetto {
|
||||
private Float prevX;
|
||||
private Float prevY;
|
||||
private final ConfettoInfo confettoInfo;
|
||||
private final Bitmap snowflake;
|
||||
private final float snowScale;
|
||||
//private float rainStretch;
|
||||
|
||||
SnowParticle(Context context, ConfettoInfo confettoInfo) {
|
||||
super();
|
||||
this.confettoInfo = confettoInfo;
|
||||
snowScale = 0.6f - (float) Math.random() * 0.3f;
|
||||
//rainStretch = 1.5f + (float)Math.random() - 0.5f;
|
||||
snowflake = BitmapFactory.decodeResource(context.getResources(), R.drawable.snowflake);
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
super.reset();
|
||||
this.prevX = null;
|
||||
this.prevY = null;
|
||||
}
|
||||
|
||||
protected void configurePaint(Paint paint) {
|
||||
super.configurePaint(paint);
|
||||
paint.setColor(-1);
|
||||
paint.setAntiAlias(true);
|
||||
}
|
||||
|
||||
protected void drawInternal(Canvas canvas, Matrix matrix, Paint paint, float x, float y, float rotation, float percentageAnimated) {
|
||||
if (prevX == null || prevY == null) {
|
||||
prevX = x;
|
||||
prevY = y;
|
||||
}
|
||||
|
||||
switch (confettoInfo.getPrecipType()) {
|
||||
case CLEAR:
|
||||
break;
|
||||
// case RAIN:
|
||||
// float dX = x - prevX;
|
||||
// float dY = y - prevY;
|
||||
// float x1 = prevX - dX * rainStretch;
|
||||
// float y1 = prevY - dY * rainStretch;
|
||||
// float x2 = x + dX * rainStretch;
|
||||
// float y2 = y + dY * rainStretch;
|
||||
// paint.setShader(new LinearGradient(x1, y1, x2, y2, new int[] { Color.TRANSPARENT, 0xb29aa3ad, 0xb29aa3ad, Color.TRANSPARENT }, new float[] { 0f, 0.45f, 0.55f, 1f }, Shader.TileMode.CLAMP));
|
||||
// canvas.drawLine(x1, y1, x2, y2, paint);
|
||||
// break;
|
||||
case SNOW:
|
||||
matrix.postScale(snowScale, snowScale);
|
||||
matrix.postRotate(rotation, snowflake.getWidth() / 2f, snowflake.getHeight() / 2f);
|
||||
matrix.postTranslate(x, y);
|
||||
canvas.drawBitmap(snowflake, matrix, paint);
|
||||
break;
|
||||
}
|
||||
prevX = x;
|
||||
prevY = y;
|
||||
}
|
||||
|
||||
public final ConfettoInfo getConfettoInfo() {
|
||||
return this.confettoInfo;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
package name.mikanoshi.customiuizer.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.view.Surface;
|
||||
|
||||
import com.github.matteobattilana.weather.WeatherView;
|
||||
|
||||
public final class GravitySensor implements SensorEventListener {
|
||||
private final SensorManager sensorManager;
|
||||
private float[] magneticValues;
|
||||
private float[] accelerometerValues;
|
||||
private int orientation;
|
||||
private int speed;
|
||||
private boolean started;
|
||||
private final Context context;
|
||||
private final WeatherView weatherView;
|
||||
|
||||
public GravitySensor(Context context, WeatherView weatherView) {
|
||||
super();
|
||||
this.context = context;
|
||||
this.weatherView = weatherView;
|
||||
this.sensorManager = (SensorManager) this.context.getSystemService(Context.SENSOR_SERVICE);
|
||||
}
|
||||
|
||||
public void setOrientation(int orient) {
|
||||
this.orientation = orient;
|
||||
}
|
||||
|
||||
public void setSpeed(int spd) {
|
||||
this.speed = spd;
|
||||
}
|
||||
|
||||
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||
}
|
||||
|
||||
public void onSensorChanged(SensorEvent event) {
|
||||
if (event == null || event.sensor == null) return;
|
||||
switch (event.sensor.getType()) {
|
||||
case 1:
|
||||
this.accelerometerValues = event.values;
|
||||
break;
|
||||
case 2:
|
||||
this.magneticValues = event.values;
|
||||
break;
|
||||
}
|
||||
if (this.magneticValues == null || this.accelerometerValues == null) return;
|
||||
|
||||
float[] rotationMatrix = new float[9];
|
||||
SensorManager.getRotationMatrix(rotationMatrix, null, this.accelerometerValues, this.magneticValues);
|
||||
float[] remappedRotationMatrix = new float[9];
|
||||
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remappedRotationMatrix);
|
||||
float[] orientationAngles = new float[3];
|
||||
SensorManager.getOrientation(remappedRotationMatrix, orientationAngles);
|
||||
//double pitch = Math.toDegrees((double)orientationAngles[1]);
|
||||
double roll = Math.toDegrees(orientationAngles[2]) + Math.random() * 20 - 10;
|
||||
if (this.orientation == Surface.ROTATION_90) roll += 90;
|
||||
else if (this.orientation == Surface.ROTATION_270) roll -= 90;
|
||||
else if (this.orientation == Surface.ROTATION_180) roll += roll > 0 ? 180 : -180;
|
||||
if (roll > 90) roll -= 180;
|
||||
else if (roll < -90) roll += 180;
|
||||
this.weatherView.setAngle((int) roll);
|
||||
this.weatherView.setSpeed(this.speed + (int) Math.round(Math.random() * 20 - 10));
|
||||
}
|
||||
|
||||
private void registerListener() {
|
||||
this.sensorManager.registerListener(this, this.sensorManager.getDefaultSensor(1), 2);
|
||||
this.sensorManager.registerListener(this, this.sensorManager.getDefaultSensor(2), 2);
|
||||
}
|
||||
|
||||
private void unregisterListener() {
|
||||
this.sensorManager.unregisterListener(this);
|
||||
}
|
||||
|
||||
public final void start() {
|
||||
this.started = true;
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
public final void stop() {
|
||||
this.started = false;
|
||||
this.unregisterListener();
|
||||
}
|
||||
|
||||
public final void onResume() {
|
||||
if (this.started) {
|
||||
this.registerListener();
|
||||
}
|
||||
}
|
||||
|
||||
public final void onPause() {
|
||||
this.unregisterListener();
|
||||
}
|
||||
|
||||
public final Context getContext() {
|
||||
return this.context;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -158,18 +158,5 @@ public class MainActivity extends BaseActivity {
|
|||
super.onResume();
|
||||
int moduleCount = ModuleUtil.getInstance().getEnabledModules().size();
|
||||
binding.modulesSummary.setText(getResources().getQuantityString(R.plurals.modules_enabled_count, moduleCount, moduleCount));
|
||||
HolidayHelper.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
HolidayHelper.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
HolidayHelper.onPause();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 514 B |
Binary file not shown.
|
Before Width: | Height: | Size: 576 B |
Binary file not shown.
|
Before Width: | Height: | Size: 362 B |
Binary file not shown.
|
Before Width: | Height: | Size: 754 B |
Binary file not shown.
|
Before Width: | Height: | Size: 730 B |
|
|
@ -28,15 +28,6 @@
|
|||
app:edgeToEdge="true"
|
||||
app:fitSystemWindowsInsets="start|end">
|
||||
|
||||
<com.github.matteobattilana.weather.WeatherView
|
||||
android:id="@+id/weather_view"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:translationZ="101dp"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/holiday_header"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ allprojects {
|
|||
google()
|
||||
mavenCentral()
|
||||
maven("https://jcenter.bintray.com")
|
||||
maven("https://jitpack.io")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue