Validate icon packs
This commit is contained in:
parent
92d8708ada
commit
d25799719e
@ -60,7 +60,7 @@ public class MainActivity extends BaseActivity {
|
|||||||
|
|
||||||
private Consumer<Uri> pickBackupFileLoadCallback;
|
private Consumer<Uri> pickBackupFileLoadCallback;
|
||||||
|
|
||||||
private ActivityResultLauncher<String[]> pickIconPackFileLoad;
|
private ActivityResultLauncher<String[]> pickIconPackFile;
|
||||||
|
|
||||||
private ActivityResultLauncher<PickVisualMediaRequest> pickIconImage;
|
private ActivityResultLauncher<PickVisualMediaRequest> pickIconImage;
|
||||||
|
|
||||||
@ -141,12 +141,23 @@ public class MainActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
pickIconPackFileLoad = registerForActivityResult(new ActivityResultContracts.OpenDocument(), doc -> {
|
pickIconPackFile = registerForActivityResult(new ActivityResultContracts.OpenDocument(), doc -> {
|
||||||
lockOnStop = true;
|
lockOnStop = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(doc == null) return;
|
if(doc == null) return;
|
||||||
IconPackMetadata meta = IconUtil.importIconPack(this, doc); // TODO: check if pack contains icons
|
IconPackMetadata meta = IconUtil.importIconPack(this, doc);
|
||||||
|
|
||||||
|
if(!meta.validate()) {
|
||||||
|
DialogUtil.showErrorDialog(this, getString(R.string.error_icon_pack_invalid));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(meta.getIcons().length == 0) {
|
||||||
|
DialogUtil.showErrorDialog(this, getString(R.string.error_icon_pack_empty));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DialogUtil.showErrorDialog(this, "Icon pack contains " + meta.getIcons().length + " icons");
|
DialogUtil.showErrorDialog(this, "Icon pack contains " + meta.getIcons().length + " icons");
|
||||||
} catch (IconPackException e) {
|
} catch (IconPackException e) {
|
||||||
DialogUtil.showErrorDialog(this, "Failed to import icon pack", e);
|
DialogUtil.showErrorDialog(this, "Failed to import icon pack", e);
|
||||||
@ -250,7 +261,10 @@ public class MainActivity extends BaseActivity {
|
|||||||
|
|
||||||
if(!(fragment instanceof HomeFragment)) {
|
if(!(fragment instanceof HomeFragment)) {
|
||||||
NavigationUtil.navigate(this, HomeFragment.class, null);
|
NavigationUtil.navigate(this, HomeFragment.class, null);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
finishAffinity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openSettings(MenuItem item) {
|
public void openSettings(MenuItem item) {
|
||||||
@ -392,9 +406,9 @@ public class MainActivity extends BaseActivity {
|
|||||||
pickBackupFileLoad.launch(new String[]{"application/json", "*/*"});
|
pickBackupFileLoad.launch(new String[]{"application/json", "*/*"});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void promptPickIconPackLoad() {
|
public void promptPickIconPackFile() {
|
||||||
this.lockOnStop = false;
|
this.lockOnStop = false;
|
||||||
pickIconPackFileLoad.launch(new String[]{"application/zip", "*/*"});
|
pickIconPackFile.launch(new String[]{"application/zip", "*/*"});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void promptPickIconImage(Consumer<Uri> callback) {
|
public void promptPickIconImage(Consumer<Uri> callback) {
|
||||||
|
@ -261,7 +261,7 @@ public class SettingsFragment extends NamedFragment {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
binding.settingsLoadIconPack.setOnClickListener(v -> ((MainActivity) requireActivity()).promptPickIconPackLoad());
|
binding.settingsLoadIconPack.setOnClickListener(v -> ((MainActivity) requireActivity()).promptPickIconPackFile());
|
||||||
|
|
||||||
binding.settingsManageIconPacks.setOnClickListener(v -> {
|
binding.settingsManageIconPacks.setOnClickListener(v -> {
|
||||||
List<IconPack> packs = IconUtil.loadAllIconPacks(requireContext());
|
List<IconPack> packs = IconUtil.loadAllIconPacks(requireContext());
|
||||||
|
@ -30,4 +30,9 @@ public class IconMetadata {
|
|||||||
public String[] getIssuer() {
|
public String[] getIssuer() {
|
||||||
return issuer;
|
return issuer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean validate() {
|
||||||
|
return filename != null && category != null && issuer != null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,4 +24,15 @@ public class IconPackMetadata {
|
|||||||
public IconMetadata[] getIcons() {
|
public IconMetadata[] getIcons() {
|
||||||
return icons;
|
return icons;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean validate() {
|
||||||
|
if(uuid == null || name == null || icons == null) return false;
|
||||||
|
|
||||||
|
for(IconMetadata i : icons) {
|
||||||
|
if(!i.validate()) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -121,4 +121,6 @@
|
|||||||
<string name="changelog_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
<string name="changelog_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
||||||
<string name="documentation_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
<string name="documentation_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
||||||
<string name="patreon_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
<string name="patreon_link" translatable="false">https://git.cringe-studios.com/CringeStudios/Code-Guard</string>
|
||||||
|
<string name="error_icon_pack_empty">The icon pack doesn\'t contain any icons</string>
|
||||||
|
<string name="error_icon_pack_invalid">Pack contains invalid metadata. Make sure you selected the correct file</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue
Block a user