[app] Add newyear header (#97)
|
|
@ -32,6 +32,7 @@ android {
|
|||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/**'
|
||||
exclude 'kotlin/**'
|
||||
exclude 'org/**'
|
||||
exclude '**.properties'
|
||||
exclude '**.bin'
|
||||
|
|
@ -72,5 +73,9 @@ dependencies {
|
|||
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
|
||||
implementation 'me.zhanghai.android.appiconloader:appiconloader-glide:1.2.0'
|
||||
implementation 'me.zhanghai.android.fastscroll:library:1.1.5'
|
||||
//noinspection DifferentStdlibGradleVersion
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.21'
|
||||
implementation 'com.github.jinatonic.confetti:confetti:1.1.2'
|
||||
implementation files('libs/WeatherView-2.0.3.aar')
|
||||
compileOnly project(":hiddenapi-stubs")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ public class BaseActivity extends AppCompatActivity {
|
|||
getWindow().setStatusBarColor(getThemedColor(R.attr.colorPrimaryDark));
|
||||
}
|
||||
} else {
|
||||
getWindow().setStatusBarColor(getThemedColor(android.R.attr.colorBackground));
|
||||
getWindow().setStatusBarColor(0);
|
||||
}
|
||||
if (!Objects.equals(theme, getTheme(this) + getCustomTheme() + preferences.getBoolean("md2", true))) {
|
||||
recreate();
|
||||
|
|
|
|||
|
|
@ -2,10 +2,15 @@ package io.github.lsposed.manager.ui.activity;
|
|||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
|
@ -20,6 +25,8 @@ import io.github.lsposed.manager.util.GlideHelper;
|
|||
import io.github.lsposed.manager.util.ModuleUtil;
|
||||
import io.github.lsposed.manager.util.NavUtil;
|
||||
import io.github.lsposed.manager.util.light.Light;
|
||||
import name.mikanoshi.customiuizer.holidays.HolidayHelper;
|
||||
import name.mikanoshi.customiuizer.utils.Helpers;
|
||||
|
||||
public class MainActivity extends BaseActivity {
|
||||
ActivityMainBinding binding;
|
||||
|
|
@ -30,6 +37,15 @@ public class MainActivity extends BaseActivity {
|
|||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityMainBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.nestedScrollView, (v, insets) -> {
|
||||
Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime());
|
||||
v.setPadding(insets1.left, insets1.top, insets1.right, insets1.bottom);
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
}
|
||||
HolidayHelper.setup(this);
|
||||
binding.status.setOnClickListener(v -> {
|
||||
if (Constants.getXposedVersionCode() != -1) {
|
||||
new StatusDialogBuilder(this)
|
||||
|
|
@ -51,7 +67,11 @@ public class MainActivity extends BaseActivity {
|
|||
if (installedXposedVersion != null) {
|
||||
binding.statusTitle.setText(String.format(Locale.US, "%s %s", getString(R.string.Activated), Constants.getXposedVariant()));
|
||||
if (!Constants.isPermissive()) {
|
||||
binding.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.colorNormal));
|
||||
if (Helpers.currentHoliday == Helpers.Holidays.LUNARNEWYEAR) {
|
||||
binding.status.setCardBackgroundColor(0xfff05654);
|
||||
} else {
|
||||
binding.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.colorNormal));
|
||||
}
|
||||
binding.statusIcon.setImageResource(R.drawable.ic_check_circle);
|
||||
binding.statusSummary.setText(String.format(Locale.US, "%s (%d)", installedXposedVersion, Constants.getXposedVersionCode()));
|
||||
} else {
|
||||
|
|
@ -99,5 +119,18 @@ public class MainActivity extends BaseActivity {
|
|||
});
|
||||
super.onResume();
|
||||
binding.modulesSummary.setText(String.format(getString(R.string.ModulesDetail), ModuleUtil.getInstance().getEnabledModules().size()));
|
||||
HolidayHelper.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
HolidayHelper.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
HolidayHelper.onPause();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
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 io.github.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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
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 android.widget.RelativeLayout;
|
||||
|
||||
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 io.github.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);
|
||||
RelativeLayout.LayoutParams lp = (RelativeLayout.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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
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 io.github.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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package name.mikanoshi.customiuizer.utils;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class Helpers {
|
||||
|
||||
public static Holidays currentHoliday = Holidays.NONE;
|
||||
|
||||
public enum Holidays {
|
||||
NONE, NEWYEAR, LUNARNEWYEAR
|
||||
}
|
||||
|
||||
public static void detectHoliday() {
|
||||
currentHoliday = Holidays.NONE;
|
||||
Calendar cal = Calendar.getInstance();
|
||||
int month = cal.get(Calendar.MONTH);
|
||||
int monthDay = cal.get(Calendar.DAY_OF_MONTH);
|
||||
//int year = cal.get(Calendar.YEAR);
|
||||
|
||||
// Lunar NY
|
||||
if ((month == 0 && monthDay > 15) || month == 1) currentHoliday = Holidays.LUNARNEWYEAR;
|
||||
// NY
|
||||
else if (month == 0 || month == 11) currentHoliday = Holidays.NEWYEAR;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 921 B |
|
After Width: | Height: | Size: 891 B |
|
After Width: | Height: | Size: 628 B |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 754 B |
|
After Width: | Height: | Size: 730 B |
|
|
@ -5,6 +5,27 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<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"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitStart"
|
||||
android:adjustViewBounds="true"
|
||||
android:translationZ="100dp"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:visibility="gone"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:id="@+id/nestedScrollView"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
|
|
@ -1,209 +1,111 @@
|
|||
<resources>
|
||||
<string name="About">Про модифікацію</string>
|
||||
<string name="Activated">Активовано</string>
|
||||
<string name="Install">Установити</string>
|
||||
<string name="InstallDetail">Натисніть для встановлення LSPosed</string>
|
||||
<string name="Logs">Звіти</string>
|
||||
<string name="Modules">Модулі</string>
|
||||
<string name="ModulesDetail">%d модулі(в) увімкнено</string>
|
||||
<string name="Settings">Налаштування</string>
|
||||
<string name="abc_action_bar_home_description">Перейти на головну</string>
|
||||
<string name="abc_action_bar_up_description">Перейти вгору</string>
|
||||
<string name="abc_action_menu_overflow_description">Більше опцій</string>
|
||||
<string name="abc_action_mode_done">Готово</string>
|
||||
<string name="abc_activity_chooser_view_see_all">Показати всі</string>
|
||||
<string name="abc_activitychooserview_choose_application">Вибрати програму</string>
|
||||
<string name="abc_capital_off">ЗНИЖКА</string>
|
||||
<string name="abc_capital_on">УВІМК.</string>
|
||||
<string name="abc_menu_alt_shortcut_label">Alt+</string>
|
||||
<string name="abc_menu_ctrl_shortcut_label">Ctrl+</string>
|
||||
<string name="abc_menu_delete_shortcut_label">delete</string>
|
||||
<string name="abc_menu_enter_shortcut_label">enter</string>
|
||||
<string name="abc_menu_function_shortcut_label">Function+</string>
|
||||
<string name="abc_menu_meta_shortcut_label">Meta+</string>
|
||||
<string name="abc_menu_shift_shortcut_label">Shift+</string>
|
||||
<string name="abc_menu_space_shortcut_label">пробіл</string>
|
||||
<string name="abc_menu_sym_shortcut_label">Sym+</string>
|
||||
<string name="abc_prepend_shortcut_label">Menu+</string>
|
||||
<string name="abc_search_hint">Введіть пошуковий запит…</string>
|
||||
<string name="abc_searchview_description_clear">Очистити запит</string>
|
||||
<string name="abc_searchview_description_query">Пошуковий запит</string>
|
||||
<string name="abc_searchview_description_search">Пошук</string>
|
||||
<string name="abc_searchview_description_submit">Наіслати запит</string>
|
||||
<string name="abc_searchview_description_voice">Голосовий пошук</string>
|
||||
<string name="abc_shareactionprovider_share_with">Поділитися:</string>
|
||||
<string name="abc_shareactionprovider_share_with_application">Поділитися через додаток %s</string>
|
||||
<string name="abc_toolbar_collapse_description">Згорнути</string>
|
||||
<string name="about_source">https://github.com/LSPosed/LSPosed/</string>
|
||||
<string name="about_source_label">Вихідний код</string>
|
||||
<string name="accent_color">Колір акценту</string>
|
||||
<string name="android_framework">System Framework</string>
|
||||
<string name="android_sdk">Android %2$s (%1$s, API %3$d)</string>
|
||||
<string name="app_destroyed">Ця програма припинила роботу, будь ласка, переконайтесь, що завантажили її з офіційного джерела.</string>
|
||||
<string name="app_launch">Запустити</string>
|
||||
<string name="app_name">LSPosed Manager</string>
|
||||
<string name="appbar_scrolling_view_behavior">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>
|
||||
<string name="bottom_sheet_behavior">com.google.android.material.bottomsheet.BottomSheetBehavior</string>
|
||||
<string name="character_counter_content_description">Набрано символів %1$d з %2$d</string>
|
||||
<string name="character_counter_overflowed_content_description">Перевищено ліміт символів %1$d з %2$d</string>
|
||||
<string name="character_counter_pattern">%1$d/%2$d</string>
|
||||
<string name="chip_text">Chip text</string>
|
||||
<string name="clear_text_end_icon_content_description">Очистити текст</string>
|
||||
<string name="color_picker_default_title">Вибрати колір</string>
|
||||
<string name="color_swatch_description">Колір %1$d</string>
|
||||
<string name="color_swatch_description_selected">Вибрано колір: %1$d</string>
|
||||
<string name="colorized_action_bar">Кольоровий ActionBar</string>
|
||||
<string name="compile_failed">Помилка оптимізації або повернене значення порожнє</string>
|
||||
<string name="compile_failed_with_info">Помилка оптимізації:</string>
|
||||
<string name="compile_speed">Повторна оптимізація</string>
|
||||
<string name="compile_speed_msg">Оптимізація…</string>
|
||||
<string name="copy">Скопіювати</string>
|
||||
<string name="copy_toast_msg">Посилання скопійовано в буфер обміну</string>
|
||||
<string name="done">Готово!</string>
|
||||
<string name="dont_show_again">Не показувати знову</string>
|
||||
<string name="enable_module">Увімкнути модуль</string>
|
||||
<string name="error_icon_content_description">Помилка</string>
|
||||
<string name="expand_button_title">Додатково</string>
|
||||
<string name="exposed_dropdown_menu_content_description">Показати спадне меню</string>
|
||||
<string name="fab_transformation_scrim_behavior">com.google.android.material.transformation.FabTransformationScrimBehavior</string>
|
||||
<string name="fab_transformation_sheet_behavior">com.google.android.material.transformation.FabTransformationSheetBehavior</string>
|
||||
<string name="failed_to_save_scope_list">Не вдалося зберегти список областей</string>
|
||||
<string name="fallback_menu_item_copy_link">Копіювати посилання</string>
|
||||
<string name="fallback_menu_item_open_in_browser">Відкрити у веб-переглядачі</string>
|
||||
<string name="fallback_menu_item_share_link">Надіслати посилання</string>
|
||||
<string name="follow_system">Слідувати системі</string>
|
||||
<string name="group_telegram_channel_link">http://t.me/LSPosed</string>
|
||||
<string name="hide_bottom_view_on_scroll_behavior">com.google.android.material.behavior.HideBottomViewOnScrollBehavior</string>
|
||||
<string name="icon_content_description">Значок діалогового вікна</string>
|
||||
<string name="info">Інформація</string>
|
||||
<string name="install_warning_title">Обережно!</string>
|
||||
<string name="item_view_role_description">Вкладка</string>
|
||||
<string name="loading">Завантаження…</string>
|
||||
<string name="log_is_empty">Звіт порожній.</string>
|
||||
<string name="logs_cannot_read">"Не вдається прочитати звіт: "</string>
|
||||
<string name="logs_clear_failed">Не вдалося очистити звіт:</string>
|
||||
<string name="logs_cleared">Звіт успішно очищено.</string>
|
||||
<string name="logs_save_failed">Не вдалося зберегти:</string>
|
||||
<string name="lsposed_not_active">LSPosed наразі не встановлений або не активний.</string>
|
||||
<string name="material_design_2">Material Design 2</string>
|
||||
<string name="material_slider_range_end">Кінець діапазону,</string>
|
||||
<string name="material_slider_range_start">Початок діапазону,</string>
|
||||
<string name="menuClearLog">Очистити звіт зараз</string>
|
||||
<string name="menuReload">Перезавантажити</string>
|
||||
<string name="menuSaveToSd">Зберегти</string>
|
||||
<string name="menuSend">Надіслати</string>
|
||||
<string name="menu_backup">Створити резервну копію</string>
|
||||
<string name="menu_backup_and_restore">Створення резервної копії…</string>
|
||||
<string name="menu_restore">Відновити</string>
|
||||
<string name="menu_show_games">Ігри</string>
|
||||
<string name="menu_show_modules">Модулі</string>
|
||||
<string name="menu_show_system_apps">Системні програми</string>
|
||||
<string name="menu_sort">Сортування...</string>
|
||||
<string name="module_app_info">Інформація про програму</string>
|
||||
<string name="module_disabled_no_selection">Модуль %s вимкнено, оскільки жодна програма не вибрана.</string>
|
||||
<string name="module_empty_description">(опису не надано)</string>
|
||||
<string name="module_is_not_activated_yet">Модуль LSPosed ще не активований</string>
|
||||
<string name="module_is_not_activated_yet_detailed">%s було встановлено, але ще не активовано</string>
|
||||
<string name="module_no_ui">Цей модуль не надає інтерфейсу користувача</string>
|
||||
<string name="module_settings">Налаштування модуля</string>
|
||||
<string name="module_uninstall">Видалити</string>
|
||||
<string name="modules_app_store">Переглянути в Play Store</string>
|
||||
<string name="mtrl_badge_numberless_content_description">Нове сповіщення</string>
|
||||
<string name="mtrl_chip_close_icon_content_description">Видалити %1$s</string>
|
||||
<string name="mtrl_exceed_max_badge_number_content_description">Більше %1$d нових сповіщень</string>
|
||||
<string name="mtrl_exceed_max_badge_number_suffix">%1$d%2$s</string>
|
||||
<string name="mtrl_picker_a11y_next_month">Змінити на наступний місяць</string>
|
||||
<string name="mtrl_picker_a11y_prev_month">Змінити на попередній місяць</string>
|
||||
<string name="mtrl_picker_announce_current_selection">Поточний вибір: %1$s</string>
|
||||
<string name="mtrl_picker_cancel">@android:string/cancel</string>
|
||||
<string name="mtrl_picker_confirm">@android:string/ok</string>
|
||||
<string name="mtrl_picker_date_header_selected">%1$s</string>
|
||||
<string name="mtrl_picker_date_header_title">Виберіть дату</string>
|
||||
<string name="mtrl_picker_date_header_unselected">Вибрана дата</string>
|
||||
<string name="mtrl_picker_day_of_week_column_header">Стовпець днів: %1$s</string>
|
||||
<string name="mtrl_picker_invalid_format">Недійсний формат.</string>
|
||||
<string name="mtrl_picker_invalid_format_example">Приклад: %1$s</string>
|
||||
<string name="mtrl_picker_invalid_format_use">Використання: %1$s</string>
|
||||
<string name="mtrl_picker_invalid_range">Недійсний діапазон.</string>
|
||||
<string name="mtrl_picker_navigate_to_year_description">Перейти до року %1$s</string>
|
||||
<string name="mtrl_picker_out_of_range">Не належить діапазону: %1$s</string>
|
||||
<string name="mtrl_picker_range_header_only_end_selected">Дата початку – %1$s</string>
|
||||
<string name="mtrl_picker_range_header_only_start_selected">%1$s – Кінцева дата</string>
|
||||
<string name="mtrl_picker_range_header_selected">%1$s – %2$s</string>
|
||||
<string name="mtrl_picker_range_header_title">Виберіть діапазон дат</string>
|
||||
<string name="mtrl_picker_range_header_unselected">Дата початку - дата закінчення</string>
|
||||
<string name="mtrl_picker_save">Зберегти</string>
|
||||
<string name="mtrl_picker_text_input_date_hint">Дата</string>
|
||||
<string name="mtrl_picker_text_input_date_range_end_hint">Дата закінчення</string>
|
||||
<string name="mtrl_picker_text_input_date_range_start_hint">Дата початку</string>
|
||||
<string name="mtrl_picker_text_input_day_abbr">д</string>
|
||||
<string name="mtrl_picker_text_input_month_abbr">м</string>
|
||||
<string name="mtrl_picker_text_input_year_abbr">р</string>
|
||||
<string name="mtrl_picker_toggle_to_calendar_input_mode">Перемкнутись на режим введення календаря</string>
|
||||
<string name="mtrl_picker_toggle_to_day_selection">Торкніться, щоб перейти до вибору дня</string>
|
||||
<string name="mtrl_picker_toggle_to_text_input_mode">Перемкнутись до режиму введення тексту</string>
|
||||
<string name="mtrl_picker_toggle_to_year_selection">Торкніться, щоб перейти до вибору року</string>
|
||||
<string name="nav_item_logs">Детальні звіти</string>
|
||||
<string name="nav_item_logs_err">Звіти модулів</string>
|
||||
<string name="nav_item_modules">Модулі</string>
|
||||
<string name="no_min_version_specified">Цей модуль не визначає потрібну йому версію LSP.</string>
|
||||
<string name="no_scope_selected">Ви не вибрали жодної програми. Продовжити?</string>
|
||||
<string name="no_scope_selected_has_recommended">Ви не вибрали жодної програми. Вибрати рекомендовані програми?</string>
|
||||
<string name="not_installed">Не встановлено</string>
|
||||
<string name="not_logcat">"Це звіт LSPosed Framework та модулів, якщо вам потрібен Android logcat, ви можете спробувати наш модуль Magisk Log Catcher"</string>
|
||||
<string name="not_set">Не налаштовано</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="outdated_manager">Версія LSPosed Manager і LSPosed Core не узгоджуються. Будь ласка, встановіть відповідну версію.</string>
|
||||
<string name="password_toggle_content_description">Показувати пароль</string>
|
||||
<string name="path_password_eye">M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z</string>
|
||||
<string name="path_password_eye_mask_strike_through">M2,4.27 L19.73,22 L22.27,19.46 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
|
||||
<string name="path_password_eye_mask_visible">M2,4.27 L2,4.27 L4.54,1.73 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
|
||||
<string name="path_password_strike_through">M3.27,4.27 L19.74,20.74</string>
|
||||
<string name="pref_title_disable_verbose_log">Вимкнути детальні звіти</string>
|
||||
<string name="preference_copied">\"%1$s\": скопійовано в буфер обміну.</string>
|
||||
<string name="primary_color">Основний колір</string>
|
||||
<string name="pure_black_dark_theme">Використовувати чисто чорну темну тему</string>
|
||||
<string name="requested_by_module">Рекомендовано</string>
|
||||
<string name="scroll_bottom">Прокрутити донизу</string>
|
||||
<string name="scroll_top">Прокрутити догори</string>
|
||||
<string name="search_menu_title">Пошук</string>
|
||||
<string name="selinux_permissive"><b>УВАГА:</b> Статус SELinux не Enforcing! Шкідливі програми, які користуються цим, зможуть повністю керувати вашим пристроєм і спричинити шкоду вашим даним.</string>
|
||||
<string name="selinux_permissive_summary">Статус SELinux не Enforcing!</string>
|
||||
<string name="settings_backup">Резервне копіювання</string>
|
||||
<string name="settings_backup_and_restore">Резервне копіювання і відновлення</string>
|
||||
<string name="settings_backup_and_restore_summery">Резервне копіювання або відновлення списку модулів та списків областей.</string>
|
||||
<string name="settings_backup_failed">Не вдалося зробити резервну копію</string>
|
||||
<string name="settings_backup_success">Резервне копіювання закінчено!</string>
|
||||
<string name="settings_backuping">Резервне копіювання…</string>
|
||||
<string name="settings_enable_resources">Увімкнути хуки ресурсів</string>
|
||||
<string name="settings_enable_resources_summary">УВАГА: Хуки ресурсів застаріли</string>
|
||||
<string name="settings_group_framework">Framework</string>
|
||||
<string name="settings_group_theme">Тема</string>
|
||||
<string name="settings_restore">Відновлення</string>
|
||||
<string name="settings_restore_failed">Не вдалося відновити</string>
|
||||
<string name="settings_restore_success">Відновлення закінчено!</string>
|
||||
<string name="settings_restoring">Відновлення…</string>
|
||||
<string name="settings_theme">Тема</string>
|
||||
<string name="settings_theme_dark">Темна</string>
|
||||
<string name="settings_theme_light">Світла</string>
|
||||
<string name="settings_variant">Варіант</string>
|
||||
<string name="sort_by_install_time">Сортувати за часом встановлення</string>
|
||||
<string name="sort_by_install_time_reverse">Сортувати за часом встановлення (зворотній)</string>
|
||||
<string name="sort_by_name">Сортувати за назвою програми</string>
|
||||
<string name="sort_by_name_reverse">Сортувати за назвою програми (зворотній)</string>
|
||||
<string name="sort_by_package_name">Сортувати за назвою пакета</string>
|
||||
<string name="sort_by_package_name_reverse">Сортувати за назвою пакету (зворотній)</string>
|
||||
<string name="sort_by_update_time">Сортувати за часом оновлення</string>
|
||||
<string name="sort_by_update_time_reverse">Сортувати за часом оновлення (зворотній)</string>
|
||||
<string name="status_bar_notification_info_overflow">999+</string>
|
||||
<string name="summary_collapsed_preference_list">%1$s, %2$s</string>
|
||||
<string name="transparent_status_bar">Прозорий рядок стану</string>
|
||||
<string name="use_recommended">Рекомендовано</string>
|
||||
<string name="use_recommended_message">Вибрати рекомендовані програми?</string>
|
||||
<string name="v7_preference_off">ВИМКНЕНО</string>
|
||||
<string name="v7_preference_on">УВІМКНЕНО</string>
|
||||
<string name="warning_installed_on_external_storage">Цей модуль не можна завантажити, оскільки він встановлений на SD-карті, перенесіть його у внутрішню пам’ять</string>
|
||||
<string name="warning_min_version_too_low">Цей модуль був створений для версії LSP %1$d, але через несумісні зміни у версії %2$d його було вимкнено</string>
|
||||
<string name="warning_xposed_min_version">Цей модуль вимагає новішої версії LSP (%d), тому його неможливо активувати</string>
|
||||
<string name="xposed_module_updated_notification_title">Модуль LSPosed оновлено</string>
|
||||
<string name="About">Про модифікацію</string>
|
||||
<string name="Activated">Активовано</string>
|
||||
<string name="Install">Установити</string>
|
||||
<string name="InstallDetail">Натисніть для встановлення LSPosed</string>
|
||||
<string name="Logs">Звіти</string>
|
||||
<string name="Modules">Модулі</string>
|
||||
<string name="ModulesDetail">%d модулі(в) увімкнено</string>
|
||||
<string name="Settings">Налаштування</string>
|
||||
<string name="about_source">https://github.com/LSPosed/LSPosed/</string>
|
||||
<string name="about_source_label">Вихідний код</string>
|
||||
<string name="accent_color">Колір акценту</string>
|
||||
<string name="android_framework">System Framework</string>
|
||||
<string name="android_sdk">Android %2$s (%1$s, API %3$d)</string>
|
||||
<string name="app_destroyed">Ця програма припинила роботу, будь ласка, переконайтесь, що завантажили її з офіційного джерела.</string>
|
||||
<string name="app_launch">Запустити</string>
|
||||
<string name="app_name">LSPosed Manager</string>
|
||||
<string name="appbar_scrolling_view_behavior">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>
|
||||
<string name="colorized_action_bar">Кольоровий ActionBar</string>
|
||||
<string name="compile_failed">Помилка оптимізації або повернене значення порожнє</string>
|
||||
<string name="compile_failed_with_info">Помилка оптимізації:</string>
|
||||
<string name="compile_speed">Повторна оптимізація</string>
|
||||
<string name="compile_speed_msg">Оптимізація…</string>
|
||||
<string name="copy_toast_msg">Посилання скопійовано в буфер обміну</string>
|
||||
<string name="dont_show_again">Не показувати знову</string>
|
||||
<string name="enable_module">Увімкнути модуль</string>
|
||||
<string name="failed_to_save_scope_list">Не вдалося зберегти список областей</string>
|
||||
<string name="follow_system">Слідувати системі</string>
|
||||
<string name="group_telegram_channel_link">http://t.me/LSPosed</string>
|
||||
<string name="info">Інформація</string>
|
||||
<string name="install_warning_title">Обережно!</string>
|
||||
<string name="loading">Завантаження…</string>
|
||||
<string name="log_is_empty">Звіт порожній.</string>
|
||||
<string name="logs_cannot_read">"Не вдається прочитати звіт: "</string>
|
||||
<string name="logs_clear_failed">Не вдалося очистити звіт:</string>
|
||||
<string name="logs_cleared">Звіт успішно очищено.</string>
|
||||
<string name="logs_save_failed">Не вдалося зберегти:</string>
|
||||
<string name="lsposed_not_active">LSPosed наразі не встановлений або не активний.</string>
|
||||
<string name="material_design_2">Material Design 2</string>
|
||||
<string name="menuClearLog">Очистити звіт зараз</string>
|
||||
<string name="menuReload">Перезавантажити</string>
|
||||
<string name="menuSaveToSd">Зберегти</string>
|
||||
<string name="menuSend">Надіслати</string>
|
||||
<string name="menu_backup">Створити резервну копію</string>
|
||||
<string name="menu_backup_and_restore">Створення резервної копії…</string>
|
||||
<string name="menu_restore">Відновити</string>
|
||||
<string name="menu_show_games">Ігри</string>
|
||||
<string name="menu_show_modules">Модулі</string>
|
||||
<string name="menu_show_system_apps">Системні програми</string>
|
||||
<string name="menu_sort">Сортування...</string>
|
||||
<string name="module_app_info">Інформація про програму</string>
|
||||
<string name="module_disabled_no_selection">Модуль %s вимкнено, оскільки жодна програма не вибрана.</string>
|
||||
<string name="module_empty_description">(опису не надано)</string>
|
||||
<string name="module_is_not_activated_yet">Модуль LSPosed ще не активований</string>
|
||||
<string name="module_is_not_activated_yet_detailed">%s було встановлено, але ще не активовано</string>
|
||||
<string name="module_no_ui">Цей модуль не надає інтерфейсу користувача</string>
|
||||
<string name="module_settings">Налаштування модуля</string>
|
||||
<string name="module_uninstall">Видалити</string>
|
||||
<string name="modules_app_store">Переглянути в Play Store</string>
|
||||
<string name="nav_item_logs">Детальні звіти</string>
|
||||
<string name="nav_item_logs_err">Звіти модулів</string>
|
||||
<string name="nav_item_modules">Модулі</string>
|
||||
<string name="no_min_version_specified">Цей модуль не визначає потрібну йому версію LSP.</string>
|
||||
<string name="no_scope_selected">Ви не вибрали жодної програми. Продовжити?</string>
|
||||
<string name="no_scope_selected_has_recommended">Ви не вибрали жодної програми. Вибрати рекомендовані програми?</string>
|
||||
<string name="not_installed">Не встановлено</string>
|
||||
<string name="not_logcat">"Це звіт LSPosed Framework та модулів, якщо вам потрібен Android logcat, ви можете спробувати наш модуль Magisk Log Catcher"</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="outdated_manager">Версія LSPosed Manager і LSPosed Core не узгоджуються. Будь ласка, встановіть відповідну версію.</string>
|
||||
<string name="pref_title_disable_verbose_log">Вимкнути детальні звіти</string>
|
||||
<string name="primary_color">Основний колір</string>
|
||||
<string name="pure_black_dark_theme">Використовувати чисто чорну темну тему</string>
|
||||
<string name="requested_by_module">Рекомендовано</string>
|
||||
<string name="scroll_bottom">Прокрутити донизу</string>
|
||||
<string name="scroll_top">Прокрутити догори</string>
|
||||
<string name="selinux_permissive"><b>УВАГА:</b> Статус SELinux не Enforcing! Шкідливі програми, які користуються цим, зможуть повністю керувати вашим пристроєм і спричинити шкоду вашим даним.</string>
|
||||
<string name="selinux_permissive_summary">Статус SELinux не Enforcing!</string>
|
||||
<string name="settings_backup">Резервне копіювання</string>
|
||||
<string name="settings_backup_and_restore">Резервне копіювання і відновлення</string>
|
||||
<string name="settings_backup_and_restore_summery">Резервне копіювання або відновлення списку модулів та списків областей.</string>
|
||||
<string name="settings_backup_failed">Не вдалося зробити резервну копію</string>
|
||||
<string name="settings_backup_success">Резервне копіювання закінчено!</string>
|
||||
<string name="settings_backuping">Резервне копіювання…</string>
|
||||
<string name="settings_enable_resources">Увімкнути хуки ресурсів</string>
|
||||
<string name="settings_enable_resources_summary">УВАГА: Хуки ресурсів застаріли</string>
|
||||
<string name="settings_group_framework">Framework</string>
|
||||
<string name="settings_group_theme">Тема</string>
|
||||
<string name="settings_restore">Відновлення</string>
|
||||
<string name="settings_restore_failed">Не вдалося відновити</string>
|
||||
<string name="settings_restore_success">Відновлення закінчено!</string>
|
||||
<string name="settings_restoring">Відновлення…</string>
|
||||
<string name="settings_theme">Тема</string>
|
||||
<string name="settings_theme_dark">Темна</string>
|
||||
<string name="settings_theme_light">Світла</string>
|
||||
<string name="settings_variant">Варіант</string>
|
||||
<string name="sort_by_install_time">Сортувати за часом встановлення</string>
|
||||
<string name="sort_by_install_time_reverse">Сортувати за часом встановлення (зворотній)</string>
|
||||
<string name="sort_by_name">Сортувати за назвою програми</string>
|
||||
<string name="sort_by_name_reverse">Сортувати за назвою програми (зворотній)</string>
|
||||
<string name="sort_by_package_name">Сортувати за назвою пакета</string>
|
||||
<string name="sort_by_package_name_reverse">Сортувати за назвою пакету (зворотній)</string>
|
||||
<string name="sort_by_update_time">Сортувати за часом оновлення</string>
|
||||
<string name="sort_by_update_time_reverse">Сортувати за часом оновлення (зворотній)</string>
|
||||
<string name="transparent_status_bar">Прозорий рядок стану</string>
|
||||
<string name="use_recommended">Рекомендовано</string>
|
||||
<string name="use_recommended_message">Вибрати рекомендовані програми?</string>
|
||||
<string name="warning_installed_on_external_storage">Цей модуль не можна завантажити, оскільки він встановлений на SD-карті, перенесіть його у внутрішню пам’ять</string>
|
||||
<string name="warning_min_version_too_low">Цей модуль був створений для версії LSP %1$d, але через несумісні зміни у версії %2$d його було вимкнено</string>
|
||||
<string name="warning_xposed_min_version">Цей модуль вимагає новішої версії LSP (%d), тому його неможливо активувати</string>
|
||||
<string name="xposed_module_updated_notification_title">Модуль LSPosed оновлено</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="compile_speed_msg">优化中…</string>
|
||||
<string name="done">完成!</string>
|
||||
|
||||
<string name="pref_title_disable_verbose_log">禁用详细日志</string>
|
||||
<string name="logs_cannot_read">无法读取日志: \n</string>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="compile_speed_msg">優化中…</string>
|
||||
<string name="done">完成!</string>
|
||||
|
||||
<string name="pref_title_disable_verbose_log">禁用詳細日誌</string>
|
||||
<string name="logs_cannot_read">無法讀取日誌: \n</string>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<string name="Logs">日誌</string>
|
||||
<string name="Settings">設定</string>
|
||||
<string name="About">關於</string>
|
||||
|
||||
|
||||
<!-- General/various strings -->
|
||||
<string name="menuSend">傳送</string>
|
||||
<string name="menuSaveToSd">儲存</string>
|
||||
|
|
@ -80,7 +80,6 @@
|
|||
<string name="android_sdk" translatable="false">Android %2$s (%1$s, API %3$d)</string>
|
||||
<string name="not_logcat">這裡是 LSPosed 框架和模組的日誌\n若您需要 Android 的 logcat,您可以嘗試我們 Log Catcher 的 Magisk 模組</string>
|
||||
|
||||
<string name="done">Done!</string>
|
||||
<!-- LSPd related -->
|
||||
<string name="compile_speed_msg">最佳化中…</string>
|
||||
|
||||
|
|
|
|||