You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.1 KiB
Java
135 lines
5.1 KiB
Java
package com.fox2code.mmm;
|
|
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
import android.widget.Toast;
|
|
|
|
import androidx.annotation.AttrRes;
|
|
import androidx.annotation.DrawableRes;
|
|
import androidx.annotation.StringRes;
|
|
|
|
import com.fox2code.mmm.compat.CompatActivity;
|
|
import com.fox2code.mmm.installer.InstallerInitializer;
|
|
import com.fox2code.mmm.repo.RepoManager;
|
|
import com.fox2code.mmm.utils.Files;
|
|
import com.fox2code.mmm.utils.IntentHelper;
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.zip.ZipFile;
|
|
|
|
interface NotificationTypeCst {
|
|
String TAG = "NotificationType";
|
|
}
|
|
|
|
public enum NotificationType implements NotificationTypeCst {
|
|
SHOWCASE_MODE(R.string.showcase_mode, R.drawable.ic_baseline_monitor_24,
|
|
R.attr.colorPrimary, R.attr.colorOnPrimary) {
|
|
@Override
|
|
public boolean shouldRemove() {
|
|
return !MainApplication.isShowcaseMode();
|
|
}
|
|
},
|
|
NO_ROOT(R.string.fail_root_magisk, R.drawable.ic_baseline_numbers_24) {
|
|
@Override
|
|
public boolean shouldRemove() {
|
|
return InstallerInitializer.peekMagiskPath() != null;
|
|
}
|
|
},
|
|
MAGISK_OUTDATED(R.string.magisk_outdated, R.drawable.ic_baseline_update_24) {
|
|
@Override
|
|
public boolean shouldRemove() {
|
|
return InstallerInitializer.peekMagiskPath() == null ||
|
|
InstallerInitializer.peekMagiskVersion() >=
|
|
Constants.MAGISK_VER_CODE_PATH_SUPPORT;
|
|
}
|
|
},
|
|
NO_INTERNET(R.string.fail_internet, R.drawable.ic_baseline_cloud_off_24) {
|
|
@Override
|
|
public boolean shouldRemove() {
|
|
return RepoManager.getINSTANCE().hasConnectivity();
|
|
}
|
|
},
|
|
INSTALL_FROM_STORAGE(R.string.install_from_storage, R.drawable.ic_baseline_storage_24,
|
|
R.attr.colorBackgroundFloating, R.attr.colorOnBackground, v -> {
|
|
CompatActivity compatActivity = CompatActivity.getCompatActivity(v);
|
|
final File module = new File(compatActivity.getCacheDir(),
|
|
"installer" + File.separator + "module.zip");
|
|
IntentHelper.openFileTo(compatActivity, module, (d, s) -> {
|
|
if (s) {
|
|
try {
|
|
boolean needPatch;
|
|
try (ZipFile zipFile = new ZipFile(d)) {
|
|
needPatch = zipFile.getEntry("module.prop") == null;
|
|
}
|
|
if (needPatch) {
|
|
Files.patchModuleSimple(Files.read(d),
|
|
new FileOutputStream(d));
|
|
}
|
|
try (ZipFile zipFile = new ZipFile(d)) {
|
|
needPatch = zipFile.getEntry("module.prop") == null;
|
|
}
|
|
if (needPatch) {
|
|
if (d.exists() && !d.delete())
|
|
Log.w(TAG, "Failed to delete non module zip");
|
|
Toast.makeText(compatActivity,
|
|
R.string.invalid_format, Toast.LENGTH_SHORT).show();
|
|
} else {
|
|
IntentHelper.openInstaller(compatActivity, d.getAbsolutePath(),
|
|
compatActivity.getString(
|
|
R.string.local_install_title), null);
|
|
}
|
|
} catch (IOException ignored) {
|
|
if (d.exists() && !d.delete())
|
|
Log.w(TAG, "Failed to delete invalid module");
|
|
Toast.makeText(compatActivity,
|
|
R.string.invalid_format, Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
});
|
|
}, true) {
|
|
@Override
|
|
public boolean shouldRemove() {
|
|
return MainApplication.isShowcaseMode() ||
|
|
InstallerInitializer.peekMagiskPath() == null;
|
|
}
|
|
};
|
|
|
|
@StringRes
|
|
public final int textId;
|
|
@DrawableRes
|
|
public final int iconId;
|
|
@AttrRes
|
|
public final int backgroundAttr;
|
|
@AttrRes
|
|
public final int foregroundAttr;
|
|
public final View.OnClickListener onClickListener;
|
|
public final boolean special;
|
|
|
|
NotificationType(@StringRes int textId, int iconId) {
|
|
this(textId, iconId, R.attr.colorError, R.attr.colorOnError);
|
|
}
|
|
|
|
NotificationType(@StringRes int textId, int iconId, int backgroundAttr, int foregroundAttr) {
|
|
this(textId, iconId, backgroundAttr, foregroundAttr, null);
|
|
}
|
|
|
|
NotificationType(@StringRes int textId, int iconId, int backgroundAttr, int foregroundAttr, View.OnClickListener onClickListener) {
|
|
this(textId, iconId, backgroundAttr, foregroundAttr, null, false);
|
|
}
|
|
|
|
NotificationType(@StringRes int textId, int iconId, int backgroundAttr, int foregroundAttr, View.OnClickListener onClickListener, boolean special) {
|
|
this.textId = textId;
|
|
this.iconId = iconId;
|
|
this.backgroundAttr = backgroundAttr;
|
|
this.foregroundAttr = foregroundAttr;
|
|
this.onClickListener = onClickListener;
|
|
this.special = special;
|
|
}
|
|
|
|
public boolean shouldRemove() {
|
|
return false;
|
|
}
|
|
}
|