[app] Remove weatherView (#418)

This commit is contained in:
tehcneko 2021-03-27 11:05:14 +08:00 committed by GitHub
parent a1201ae42b
commit 0facfb958a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 20 additions and 429 deletions

View File

@ -177,8 +177,6 @@ dependencies {
implementation("com.caverock:androidsvg-aar:1.4") implementation("com.caverock:androidsvg-aar:1.4")
implementation("com.github.bumptech.glide:glide:$glideVersion") implementation("com.github.bumptech.glide:glide:$glideVersion")
implementation("com.github.bumptech.glide:okhttp3-integration:$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.android.material:material:1.3.0")
implementation("com.google.code.gson:gson:2.8.6") implementation("com.google.code.gson:gson:2.8.6")
implementation("com.takisoft.preferencex:preferencex:1.1.0") implementation("com.takisoft.preferencex:preferencex:1.1.0")

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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; package name.mikanoshi.customiuizer.holidays;
import android.app.Activity; import android.app.Activity;
import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; 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 org.lsposed.manager.R;
import name.mikanoshi.customiuizer.utils.GravitySensor;
import name.mikanoshi.customiuizer.utils.Helpers; import name.mikanoshi.customiuizer.utils.Helpers;
public class HolidayHelper { 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) { public static void setup(Activity activity) {
Helpers.detectHoliday(); Helpers.detectHoliday();
WeatherView view = activity.findViewById(R.id.weather_view);
ImageView header = activity.findViewById(R.id.holiday_header); 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) { 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.setImageResource(R.drawable.newyear_header);
header.setVisibility(View.VISIBLE); header.setVisibility(View.VISIBLE);
} else if (Helpers.currentHoliday == Helpers.Holidays.LUNARNEWYEAR) { } 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.setImageResource(R.drawable.lunar_newyear_header);
header.setVisibility(View.VISIBLE); header.setVisibility(View.VISIBLE);
} else { } else {
((ViewGroup) view.getParent()).removeView(view);
((ViewGroup) header.getParent()).removeView(header); ((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();
}
} }

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -158,18 +158,5 @@ public class MainActivity extends BaseActivity {
super.onResume(); super.onResume();
int moduleCount = ModuleUtil.getInstance().getEnabledModules().size(); int moduleCount = ModuleUtil.getInstance().getEnabledModules().size();
binding.modulesSummary.setText(getResources().getQuantityString(R.plurals.modules_enabled_count, moduleCount, moduleCount)); 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

View File

@ -28,15 +28,6 @@
app:edgeToEdge="true" app:edgeToEdge="true"
app:fitSystemWindowsInsets="start|end"> 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 <ImageView
android:id="@+id/holiday_header" android:id="@+id/holiday_header"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -55,7 +55,6 @@ allprojects {
google() google()
mavenCentral() mavenCentral()
maven("https://jcenter.bintray.com") maven("https://jcenter.bintray.com")
maven("https://jitpack.io")
} }
} }