Browse Source

Feature/last usecases (#29)

* implemented hard reset

* implemented custom button sound

* Added Options Screen and Mute Button concept.

* Refactored Units class for metrics improvement.

* Added CollectionHelper Test

* Redesigned UI a bit and added resource icons.

Co-authored-by: D45Hub <denis.thiessen@gmx.de>
dev 0.0.3
DSinMeliodas 3 years ago
committed by GitHub
parent
commit
8593e158a9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      app/src/main/AndroidManifest.xml
  2. 6
      app/src/main/java/com/futurumgame/base/MainActivity.java
  3. 200
      app/src/main/java/com/futurumgame/base/additionalDatatypes/Units.java
  4. 9
      app/src/main/java/com/futurumgame/base/enums/DataFile.java
  5. 3
      app/src/main/java/com/futurumgame/base/gameinternals/FactoryNode.java
  6. 27
      app/src/main/java/com/futurumgame/base/gameinternals/GameRoutine.java
  7. 29
      app/src/main/java/com/futurumgame/base/resources/Resource.java
  8. 63
      app/src/main/java/com/futurumgame/base/ui/activities/OptionsViewActivity.java
  9. 9
      app/src/main/java/com/futurumgame/base/ui/activities/ResourceViewActivity.java
  10. 6
      app/src/main/java/com/futurumgame/base/ui/activities/UpdatableViewActivity.java
  11. 1
      app/src/main/java/com/futurumgame/base/ui/adapter/ResourceAdapter.java
  12. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/GoBackListener.java
  13. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/GoToViewListener.java
  14. 25
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/HardResetListener.java
  15. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/ManualCollectClickListener.java
  16. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/ManualWorkClickListener.java
  17. 46
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/SoundListener.java
  18. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/UnlockListener.java
  19. 3
      app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/UpgradeFactoryListener.java
  20. 6
      app/src/main/java/com/futurumgame/base/ui/viewholder/ResourceViewHolder.java
  21. 14
      app/src/main/java/com/futurumgame/base/ui/viewholder/UnlockableViewHolder.java
  22. 2
      app/src/main/java/com/futurumgame/base/unlockables/ResourceUnlockable.java
  23. BIN
      app/src/main/res/drawable/ingot_base.png
  24. BIN
      app/src/main/res/drawable/reset_button.png
  25. BIN
      app/src/main/res/drawable/settings_button.png
  26. BIN
      app/src/main/res/drawable/soil_icon.png
  27. BIN
      app/src/main/res/drawable/sound_off_button.png
  28. BIN
      app/src/main/res/drawable/sound_on_button.png
  29. BIN
      app/src/main/res/drawable/water_icon.png
  30. BIN
      app/src/main/res/drawable/wood_icon.png
  31. 35
      app/src/main/res/layout/activity_main.xml
  32. 11
      app/src/main/res/layout/factory_manager_view.xml
  33. 4
      app/src/main/res/layout/list_item_view.xml
  34. 8
      app/src/main/res/layout/list_price_item_view.xml
  35. 77
      app/src/main/res/layout/options_view.xml
  36. 18
      app/src/main/res/layout/resource_view.xml
  37. 9
      app/src/main/res/layout/unlock_view.xml
  38. BIN
      app/src/main/res/raw/click.ogg
  39. 109
      app/src/test/java/com/futurumgame/base/CollectionHelperTest.java

14
app/src/main/AndroidManifest.xml

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.futurumgame.base">
package="com.futurumgame.base" >
<uses-permission android:name="android.permission.INTERNET" />
<application
@ -10,17 +11,18 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/futurum_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
android:theme="@style/AppTheme" >
<activity android:name=".ui.activities.OptionsViewActivity" />
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activities.ResourceViewActivity"></activity>
<activity android:name=".ui.activities.FactoryManagerViewActivity"></activity>
<activity android:name=".ui.activities.UnlockViewActivity"></activity>
<activity android:name=".ui.activities.ResourceViewActivity" />
<activity android:name=".ui.activities.FactoryManagerViewActivity" />
<activity android:name=".ui.activities.UnlockViewActivity" />
<meta-data
android:name="preloaded_fonts"

6
app/src/main/java/com/futurumgame/base/MainActivity.java

@ -1,6 +1,7 @@
package com.futurumgame.base;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageButton;
import androidx.annotation.NonNull;
@ -12,10 +13,12 @@ import com.futurumgame.base.gameinternals.GameRoutine;
import com.futurumgame.base.gameinternals.WareHouse;
import com.futurumgame.base.resources.Resource;
import com.futurumgame.base.serialization.AndroidFileHelper;
import com.futurumgame.base.ui.activities.OptionsViewActivity;
import com.futurumgame.base.ui.activities.UnlockViewActivity;
import com.futurumgame.base.ui.activities.UpdatableViewActivity;
import com.futurumgame.base.ui.adapter.ResourceAdapter;
import com.futurumgame.base.ui.listeners.onclicklisteners.GoToViewListener;
import com.futurumgame.base.ui.listeners.onclicklisteners.HardResetListener;
public class MainActivity extends UpdatableViewActivity {
@ -42,6 +45,9 @@ public class MainActivity extends UpdatableViewActivity {
resources.setAdapter(new ResourceAdapter(GameRoutine.getWareHouse().getWareHouseStocks()));
allowUpdates();
gameRoutine.start();
ImageButton settingsButton = findViewById(R.id.settingsButton);
settingsButton.setOnClickListener(new GoToViewListener(OptionsViewActivity.class, this));
}
@Override

200
app/src/main/java/com/futurumgame/base/additionalDatatypes/Units.java

@ -75,71 +75,21 @@ public final class Units extends Number implements Comparable<Units> {
}
public void add(Units units) {
if (units.isZero()) {
return;
}
if (evaluateToNaNIfTrue(units, u -> isNaN() || u.isNaN())) {
return;
}
if (evaluateToNegInfIfTrue(units,
u -> isNegInfinity() && !u.isPosInfinity() || !isPosInfinity() && u.isNegInfinity())) {
return;
}
if (evaluateToPosInfIfTrue(units,
u -> isPosInfinity() && !u.isNegInfinity() || !isNegInfinity() && u.isPosInfinity())) {
return;
}
if (evaluateToZeroIfTrue(units, u -> isInfinity() && u.isInfinity())) {
return;
}
if (isZero()) {
value = units.getValue();
scale = units.getScale();
return;
}
if (scale > units.scale) {
value += rescaleValue(units.value, scale, units.scale);
} else if (scale < units.scale) {
value = units.value + rescaleValue(value, scale, units.scale);
scale = units.scale;
} else {
value += units.value;
boolean isUnneededAddition = checkIfUnneededAddition(units);
if (!isUnneededAddition && !checkAndExecuteZeroAddition(units)) {
executeAddition(units);
normalize();
}
normalize();
}
public void subtract(Units units) {
if (units.isZero()) {
return;
}
if (evaluateToNaNIfTrue(units, u -> isNaN() || u.isNaN())) {
return;
}
if (evaluateToNegInfIfTrue(units,
u -> isNegInfinity() && !u.isNegInfinity() || !isPosInfinity() && u.isPosInfinity())) {
return;
}
if (evaluateToPosInfIfTrue(units,
u -> isPosInfinity() && !u.isPosInfinity() || !isNegInfinity() && u.isNegInfinity())) {
return;
}
if (evaluateToZeroIfTrue(units, u -> isInfinity() && u.isInfinity())) {
return;
}
if (isZero()) {
value = -units.getValue();
scale = units.getScale();
return;
}
if (scale > units.scale) {
value -= rescaleValue(units.value, scale, units.scale);
} else if (scale < units.scale) {
value = units.value + rescaleValue(value, scale, units.scale);
scale = units.scale;
} else {
value -= units.value;
boolean isUnneededSubtraction = checkIfUnneededSubtraction(units);
if (!isUnneededSubtraction && !checkAndExecuteZeroSubtraction(units)) {
executeSubtraction(units);
normalize();
}
normalize();
}
public void multiply(Units units) {
@ -150,8 +100,7 @@ public final class Units extends Number implements Comparable<Units> {
return;
}
if (evaluateToNegInfIfTrue(units,
u -> isNegInfinity() && u.isBiggerThan(Zero) || isPosInfinity() && u.isSmallerThan(Zero)
|| isBiggerThan(Zero) && u.isNegInfinity() || isSmallerThan(Zero) && u.isPosInfinity())) {
u -> checkForMultiplicationNegativeInfinity(u))) {
return;
}
if (evaluateToPosInfIfTrue(units, u -> isInfinity() || u.isInfinity())) {
@ -413,6 +362,133 @@ public final class Units extends Number implements Comparable<Units> {
return (int) (scaleDiffRaw + (scaleDiffRaw >= 0 ? 0 : -1));
}
private boolean checkIfUnneededAddition(Units unit) {
boolean isUnneededAddition = false;
isUnneededAddition = unit.isZero();
isUnneededAddition = evaluateToNaNIfTrue(unit, u -> isNaN() || u.isNaN());
isUnneededAddition = evaluateToNegInfIfTrue(unit,
u -> checkAdditionUnitsForNegativeInfinity(u));
isUnneededAddition = evaluateToPosInfIfTrue(unit,
u -> checkAdditionUnitsForPositiveInfinity(u));
isUnneededAddition = evaluateToZeroIfTrue(unit, u -> isInfinity() && u.isInfinity());
return isUnneededAddition;
}
private boolean checkAdditionUnitsForPositiveInfinity(Units otherUnit) {
boolean isPrimaryUnitPositiveInfinity = isPosInfinity() && !otherUnit.isNegInfinity();
boolean isSecondaryUnitPositiveInfinity = !isNegInfinity() && otherUnit.isPosInfinity();
return isPrimaryUnitPositiveInfinity || isSecondaryUnitPositiveInfinity;
}
private boolean checkAdditionUnitsForNegativeInfinity(Units otherUnit) {
boolean isPrimaryUnitNegativeInfinity = isNegInfinity() && !otherUnit.isPosInfinity();
boolean isSecondaryUnitNegativeInfinity = !isPosInfinity() && otherUnit.isNegInfinity();
return isPrimaryUnitNegativeInfinity || isSecondaryUnitNegativeInfinity;
}
private boolean checkIfUnneededSubtraction(Units unit) {
boolean isUnneededSubtraction = false;
isUnneededSubtraction = unit.isZero();
boolean finalIsUnneededSubtraction = isUnneededSubtraction;
isUnneededSubtraction = evaluateToNaNIfTrue(unit, u -> checkForNaNEvaluation(u, finalIsUnneededSubtraction));
boolean finalIsUnneededSubtraction1 = isUnneededSubtraction;
isUnneededSubtraction = evaluateToNegInfIfTrue(unit, u -> checkSubtractionUnitsForNegativeInfinity(u) && !finalIsUnneededSubtraction1);
boolean finalIsUnneededSubtraction2 = isUnneededSubtraction;
isUnneededSubtraction = evaluateToPosInfIfTrue(unit, u -> checkSubtractionUnitsForPositiveInfinity(u) && !finalIsUnneededSubtraction2);
boolean finalIsUnneededSubtraction3 = isUnneededSubtraction;
isUnneededSubtraction = evaluateToZeroIfTrue(unit, u -> checkForInfinityEvaluation(u, finalIsUnneededSubtraction3));
return isUnneededSubtraction;
}
private boolean checkForNaNEvaluation(Units unit, boolean enableEvaluation) {
return (isNaN() || unit.isNaN()) && !enableEvaluation;
}
private boolean checkForInfinityEvaluation(Units unit, boolean enableEvaluation) {
return isInfinity() && unit.isInfinity() && !enableEvaluation;
}
private boolean checkSubtractionUnitsForPositiveInfinity(Units otherUnit) {
boolean isPrimaryUnitPositiveInfinity = isPosInfinity() && !otherUnit.isPosInfinity();
boolean isSecondaryUnitPositiveInfinity = !isNegInfinity() && otherUnit.isNegInfinity();
return isPrimaryUnitPositiveInfinity || isSecondaryUnitPositiveInfinity;
}
private boolean checkSubtractionUnitsForNegativeInfinity(Units otherUnit) {
boolean isPrimaryUnitNegativeInfinity = isNegInfinity() && !otherUnit.isNegInfinity();
boolean isSecondaryUnitNegativeInfinity = !isPosInfinity() && otherUnit.isPosInfinity();
return isPrimaryUnitNegativeInfinity || isSecondaryUnitNegativeInfinity;
}
private boolean checkAndExecuteZeroAddition(Units addedUnit) {
boolean isZero = isZero();
if (isZero) {
value = addedUnit.getValue();
scale = addedUnit.getScale();
}
return isZero;
}
private void executeAddition(Units addedUnit) {
if (scale > addedUnit.scale) {
value += rescaleValue(addedUnit.value, scale, addedUnit.scale);
} else if (scale < addedUnit.scale) {
value = addedUnit.value + rescaleValue(value, scale, addedUnit.scale);
scale = addedUnit.scale;
} else {
value += addedUnit.value;
}
}
private boolean checkAndExecuteZeroSubtraction(Units subtractedValue) {
boolean isZero = isZero();
if (isZero) {
value = -subtractedValue.getValue();
scale = subtractedValue.getScale();
}
return isZero;
}
private void executeSubtraction(Units subtractedUnit) {
if (scale > subtractedUnit.scale) {
value -= rescaleValue(subtractedUnit.value, scale, subtractedUnit.scale);
} else if (scale < subtractedUnit.scale) {
value = subtractedUnit.value + rescaleValue(value, scale, subtractedUnit.scale);
scale = subtractedUnit.scale;
} else {
value -= subtractedUnit.value;
}
}
private boolean checkForMultiplicationNegativeInfinity(Units unit) {
boolean isNegInfTimesPositiveValue = isNegInfinity() && unit.isBiggerThan(Zero);
boolean isPosInfTimesNegativeValue = isPosInfinity() && unit.isSmallerThan(Zero);
boolean isPositiveValueTimesNegInf = isBiggerThan(Zero) && unit.isNegInfinity();
boolean isNegativeValueTimesPosInf = isSmallerThan(Zero) && unit.isPosInfinity();
return isNegInfTimesPositiveValue || isPosInfTimesNegativeValue || isPositiveValueTimesNegInf || isNegativeValueTimesPosInf;
}
public static Units parse(String string) throws UnitsFormatException {
ParseResult<Units> result = ParseResult.failResult();
for (char c : string.toCharArray()) {

9
app/src/main/java/com/futurumgame/base/enums/DataFile.java

@ -20,6 +20,7 @@ public enum DataFile {
private static final String SaveTag = "File Saving";
private static final String ReadFileMessageFormat = "reading file: {0}";
private static final String SaveFileMessageFormat = "saving file: {0}";
private static final String ClearFileMessageFormat = "clearing file: {0}";
private static final String FileEnding = ".ftrm";
private static final ByteCompressor Compressor = ByteCompressor.newInstance(4, DataSize.KiloByte);
@ -51,4 +52,12 @@ public enum DataFile {
Log.e(SaveTag, String.format(SaveFileMessageFormat, fileName), e);
}
}
public void clear() {
try {
AndroidFileHelper.save(fileName, new byte[0]);
} catch (IOException e) {
Log.e(SaveTag, String.format(ClearFileMessageFormat, fileName), e);
}
}
}

3
app/src/main/java/com/futurumgame/base/gameinternals/FactoryNode.java

@ -36,6 +36,7 @@ public class FactoryNode<T extends Resource> extends AppCompatButton implements
setBackgroundColor(Colors.Black.getColor());
setText(current.getResource().getName());
setTextColor(Colors.White.getColor());
setSoundEffectsEnabled(false);
HashMap<String, Object> map = new HashMap<>();
map.put(MetaData.FactoryNode.getMetaName(), this);
setOnClickListener(new GoToViewListener(ResourceViewActivity.class, GameRoutine.getMainActivity(), map));
@ -51,6 +52,8 @@ public class FactoryNode<T extends Resource> extends AppCompatButton implements
return current.getResource().getID();
}
public int getResourceIconID() { return current.getResource().getResourceIconId(); }
public String getResourceName() {
return current.getResource().getName();
}

27
app/src/main/java/com/futurumgame/base/gameinternals/GameRoutine.java

@ -1,6 +1,11 @@
package com.futurumgame.base.gameinternals;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
@ -15,7 +20,9 @@ import com.futurumgame.base.factories.Factory;
import com.futurumgame.base.resources.Resource;
import com.futurumgame.base.ui.activities.UpdatableViewActivity;
import com.futurumgame.base.unlockables.UnlockableCollection;
import com.futurumgame.base.util.Logger;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Stack;
import java.util.Timer;
@ -35,6 +42,7 @@ public class GameRoutine {
private final Hashtable<Integer, Units> measuredDeltas = new Hashtable<>();
private final UnlockableCollection resourceUnlockables = UnlockableCollection.createResourceUnlockables();
private boolean hardReset;
private long tickRate = TimeUnits.Millisecond.inThisUnit(25);
private Timer timer = new Timer(true);
@ -121,6 +129,25 @@ public class GameRoutine {
current.add(factory);
}
public static boolean hardResetActivated() {
return current.hardReset;
}
public static void requestHardReset() {
current.hardReset = true;
Activity context = current.main;
Logger.e(GameRoutine.class, "request hard reset");
Arrays.stream(DataFile.values()).forEach(DataFile::clear);
Intent restartIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName() );
@SuppressLint("WrongConstant")
PendingIntent intent = PendingIntent.getActivity(
context, 0,
restartIntent, Intent.FLAG_ACTIVITY_CLEAR_TOP);
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, intent);
context.finish();
}
public static void stop() {
current.timer.cancel();
}

29
app/src/main/java/com/futurumgame/base/resources/Resource.java

@ -1,10 +1,14 @@
package com.futurumgame.base.resources;
import com.futurumgame.base.R;
import com.futurumgame.base.additionalDatatypes.Units;
import com.futurumgame.base.enums.ResourceFormatter;
import com.futurumgame.base.interfaces.IEquatable;
import com.futurumgame.base.interfaces.IParseRule;
import com.futurumgame.base.interfaces.IParseRuleProvider;
import com.futurumgame.base.resources.advanced.Wood;
import com.futurumgame.base.resources.basic.*;
import com.futurumgame.base.resources.metals.*;
import java.security.InvalidParameterException;
import java.util.Objects;
@ -15,15 +19,21 @@ public abstract class Resource implements IEquatable<Resource> {
private final int id;
private final String name;
private final int resourceIconId;
protected Resource(int id, String name) {
this.id = id;
this.name = name;
this.resourceIconId = getInitialResourceIconId();
}
public int getID(){
return id;
}
public int getResourceIconId() { return resourceIconId; }
public String getName(){
return name;
}
@ -56,7 +66,7 @@ public abstract class Resource implements IEquatable<Resource> {
@Override
public String toString() {
return ResourceFormatter.Debug.format(this);
return ResourceFormatter.Default.format(this);
}
@Override
@ -76,4 +86,21 @@ public abstract class Resource implements IEquatable<Resource> {
public int hashCode() {
return Objects.hash(id, name);
}
private int getInitialResourceIconId() {
int resourceIconId = R.drawable.water_icon;
if (name.equals(Dirt.class.getSimpleName()) || name.equals(Sand.class.getSimpleName()) || name.equals(Clay.class.getSimpleName()) || name.equals(Gravel.class.getSimpleName())) {
resourceIconId = R.drawable.soil_icon;
}
else if (name.equals(Wood.class.getSimpleName())) {
resourceIconId = R.drawable.wood_icon;
}
else if (name.equals(Aluminium.class.getSimpleName()) || name.equals(Copper.class.getSimpleName()) || name.equals(Gold.class.getSimpleName()) || name.equals(Iron.class.getSimpleName()) || name.equals(Silver.class.getSimpleName()) || name.equals(Tin.class.getSimpleName())) {
resourceIconId = R.drawable.ingot_base;
}
return resourceIconId;
}
}

63
app/src/main/java/com/futurumgame/base/ui/activities/OptionsViewActivity.java

@ -0,0 +1,63 @@
package com.futurumgame.base.ui.activities;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import com.futurumgame.base.R;
import com.futurumgame.base.gameinternals.GameRoutine;
import com.futurumgame.base.gameinternals.WareHouse;
import com.futurumgame.base.ui.listeners.onclicklisteners.GoBackListener;
import com.futurumgame.base.ui.listeners.onclicklisteners.GoToViewListener;
import com.futurumgame.base.ui.listeners.onclicklisteners.HardResetListener;
import com.futurumgame.base.ui.listeners.onclicklisteners.SoundListener;
public class OptionsViewActivity extends UpdatableViewActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GameRoutine.setNewCurrent(this);
allowUpdates();
setContentView(R.layout.options_view);
ImageButton soundButton = findViewById(R.id.soundButton);
updateSoundButton(soundButton);
ImageButton returnButton = findViewById(R.id.optionsReturnButton);
returnButton.setOnClickListener(GoBackListener.newListener());
ImageButton hardResetButton = findViewById(R.id.HardReset);
hardResetButton.setOnClickListener(HardResetListener.newListener(this));
soundButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SoundListener.toggleSoundMute();
updateSoundButton(soundButton);
}
});
}
private void updateSoundButton(ImageButton soundButton) {
if (SoundListener.muted)
{
soundButton.setBackgroundResource(R.drawable.sound_off_button);
}
else
{
soundButton.setBackgroundResource(R.drawable.sound_on_button);
}
}
@Override
public void updateUi(WareHouse wareHouse) {
}
}

9
app/src/main/java/com/futurumgame/base/ui/activities/ResourceViewActivity.java

@ -4,6 +4,7 @@ import android.media.Image;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
@ -28,6 +29,9 @@ public class ResourceViewActivity extends UpdatableViewActivity {
private TextView warehouseStocks;
private TextView productionRate;
private TextView factoryOverview;
private TextView resourceHeader;
private ImageView resourceIcon;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -52,7 +56,8 @@ public class ResourceViewActivity extends UpdatableViewActivity {
warehouseStocks = findViewById(R.id.WarehouseStock);
productionRate = findViewById(R.id.Production);
factoryOverview = findViewById(R.id.FactoryOveriew);
resourceHeader = findViewById(R.id.ResourceName);
resourceIcon = findViewById(R.id.ResourceImg);
}
@Override
@ -77,5 +82,7 @@ public class ResourceViewActivity extends UpdatableViewActivity {
ResourceUtil.getText(this, R.string.UnitsPerSecond)));
factoryOverview.setText(StringFormatter.NameLinebreakValue.format(
ResourceUtil.getText(this, R.string.Factory), FactoryFormatter.Multiline.format(node.getCurrent())));
resourceHeader.setText(node.getText());
resourceIcon.setImageResource(node.getResourceIconID());
}
}

6
app/src/main/java/com/futurumgame/base/ui/activities/UpdatableViewActivity.java

@ -8,6 +8,8 @@ import androidx.annotation.NonNull;
import com.futurumgame.base.enums.DataFile;
import com.futurumgame.base.gameinternals.WareHouse;
import java.util.Arrays;
public abstract class UpdatableViewActivity extends Activity {
private boolean canBeUpdated;
@ -15,9 +17,7 @@ public abstract class UpdatableViewActivity extends Activity {
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
for (DataFile file : DataFile.values()) {
file.save();
}
Arrays.stream(DataFile.values()).forEach(DataFile::save);
}
protected void allowUpdates(){

1
app/src/main/java/com/futurumgame/base/ui/adapter/ResourceAdapter.java

@ -1,6 +1,7 @@
package com.futurumgame.base.ui.adapter;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/GoBackListener.java

@ -4,13 +4,14 @@ import android.view.View;
import com.futurumgame.base.gameinternals.GameRoutine;
public final class GoBackListener implements View.OnClickListener {
public final class GoBackListener extends SoundListener {
private GoBackListener() {
}
@Override
public void onClick(View v) {
super.onClick(v);
GameRoutine.fallBackToPrevious();
}

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/GoToViewListener.java

@ -10,7 +10,7 @@ import com.futurumgame.base.enums.MetaData;
import java.io.Serializable;
import java.util.HashMap;
public class GoToViewListener implements View.OnClickListener {
public class GoToViewListener extends SoundListener {
private final Class<? extends Activity> clazz;
private final Activity current;
@ -28,6 +28,7 @@ public class GoToViewListener implements View.OnClickListener {
@Override
public void onClick(View v) {
super.onClick(v);
Intent intent = new Intent(current.getApplicationContext(), clazz);
if(map != null) {
MetaData.setAllMeta(map);

25
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/HardResetListener.java

@ -0,0 +1,25 @@
package com.futurumgame.base.ui.listeners.onclicklisteners;
import android.content.Context;
import android.view.View;
import com.futurumgame.base.gameinternals.GameRoutine;
public class HardResetListener extends SoundListener {
private final Context context;
private HardResetListener(Context context) {
this.context = context;
}
@Override
public void onClick(View v) {
super.onClick(v);
GameRoutine.requestHardReset();
}
public static HardResetListener newListener(Context context) {
return new HardResetListener(context);
}
}

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/ManualCollectClickListener.java

@ -6,7 +6,7 @@ import com.futurumgame.base.gameinternals.FactoryNode;
import com.futurumgame.base.gameinternals.GameRoutine;
import com.futurumgame.base.resources.Resource;
public class ManualCollectClickListener implements View.OnClickListener {
public class ManualCollectClickListener extends SoundListener {
private final FactoryNode<?extends Resource>node;
@ -16,6 +16,7 @@ public class ManualCollectClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
super.onClick(v);
Resource factoryStocks = node.getCurrent().emptyStorage();
GameRoutine.getWareHouse().addToResources(factoryStocks);
}

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/ManualWorkClickListener.java

@ -7,7 +7,7 @@ import com.futurumgame.base.factories.Factory;
import com.futurumgame.base.gameinternals.FactoryNode;
import com.futurumgame.base.resources.Resource;
public class ManualWorkClickListener implements View.OnClickListener {
public class ManualWorkClickListener extends SoundListener {
private final FactoryNode<? extends Resource> node;
@ -17,6 +17,7 @@ public class ManualWorkClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
super.onClick(v);
node.getCurrent().workManually();
}

46
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/SoundListener.java

@ -0,0 +1,46 @@
package com.futurumgame.base.ui.listeners.onclicklisteners;
import android.media.SoundPool;
import android.view.View;
import com.futurumgame.base.R;
import com.futurumgame.base.gameinternals.GameRoutine;
public abstract class SoundListener implements View.OnClickListener, SoundPool.OnLoadCompleteListener {
public static boolean muted = false;
private static final float MaxVolume = 1.0f;
private static final float NormalPlayBackRate = 1.0f;
private final SoundPool pool;
protected SoundListener(){
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(20);
pool = builder.build();
pool.setOnLoadCompleteListener(this);
}
public static void toggleSoundMute() {
muted = !muted;
}
@Override
public void onClick(View v) {
if (muted) {
return;
}
pool.load(v.getContext(), R.raw.click, 1);
}
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if(status!= 0){
return;
}
soundPool.play(sampleId, MaxVolume,MaxVolume, 1,0, NormalPlayBackRate);
}
}

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/UnlockListener.java

@ -12,7 +12,7 @@ import com.futurumgame.base.gameinternals.WareHouse;
import com.futurumgame.base.ui.activities.UnlockViewActivity;
import com.futurumgame.base.unlockables.Unlockable;
public class UnlockListener implements View.OnClickListener {
public class UnlockListener extends SoundListener {
private final Unlockable unlockable;
@ -22,6 +22,7 @@ public class UnlockListener implements View.OnClickListener {
@Override
public void onClick(View v) {
super.onClick(v);
WareHouse wareHouse = GameRoutine.getWareHouse();
if (wareHouse.canOfferResources(unlockable.getCosts())) {
wareHouse.offerResources(unlockable.getCosts());

3
app/src/main/java/com/futurumgame/base/ui/listeners/onclicklisteners/UpgradeFactoryListener.java

@ -8,7 +8,7 @@ import com.futurumgame.base.factories.Factory;
import com.futurumgame.base.gameinternals.GameRoutine;
import com.futurumgame.base.resources.Resource;
public class UpgradeFactoryListener implements View.OnClickListener {
public class UpgradeFactoryListener extends SoundListener {
private final Factory<? extends Resource> factory;
private final TextView costs;
@ -20,6 +20,7 @@ public class UpgradeFactoryListener implements View.OnClickListener {
@Override
public void onClick(View v) {
super.onClick(v);
UpgradeResult result = factory.tryUpgrade(GameRoutine.getWareHouse());
result.createPopup(v.getContext());
}

6
app/src/main/java/com/futurumgame/base/ui/viewholder/ResourceViewHolder.java

@ -2,6 +2,7 @@ package com.futurumgame.base.ui.viewholder;
import android.graphics.Color;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@ -15,15 +16,20 @@ import com.futurumgame.base.resources.Resource;
public final class ResourceViewHolder extends TextViewViewHolder<Resource> {
private TextView view;
private ImageView iconView;
public ResourceViewHolder(@NonNull View itemView) {
super(itemView);
view = itemView.findViewById(R.id.ItemText);
view.setTextColor(Colors.White.getColor());
iconView = itemView.findViewById(R.id.itemIcon);
}
public void updateText(Resource resource) {
view.setText(ResourceFormatter.Default.format(resource));
view.setTextColor(Colors.White.getColor());
iconView.setImageResource(resource.getResourceIconId());
}
}

14
app/src/main/java/com/futurumgame/base/ui/viewholder/UnlockableViewHolder.java

@ -2,11 +2,14 @@ package com.futurumgame.base.ui.viewholder;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.futurumgame.base.R;
import com.futurumgame.base.enums.Separator;
import com.futurumgame.base.unlockables.ResourceUnlockable;
import com.futurumgame.base.util.CollectionHelper;
import com.futurumgame.base.enums.Colors;
import com.futurumgame.base.enums.ResourceFormatter;
@ -19,6 +22,8 @@ public final class UnlockableViewHolder extends TextViewViewHolder<Unlockable> {
private final TextView costs;
private final ImageButton buyButton;
private ImageView unlockableIcon;
public UnlockableViewHolder(@NonNull View itemView) {
super(itemView);
view = itemView.findViewById(R.id.ItemText);
@ -26,14 +31,21 @@ public final class UnlockableViewHolder extends TextViewViewHolder<Unlockable> {
costs = itemView.findViewById(R.id.Prize);
costs.setTextColor(Colors.White.getColor());
buyButton = itemView.findViewById(R.id.UnlockButton);
unlockableIcon = itemView.findViewById(R.id.itemIcon);
}
public void updateText(Unlockable unlockable) {
view.setText(unlockable.getName());
costs.setText(CollectionHelper.toString(ResourceFormatter.Default::format, unlockable.getCosts()));
costs.setText(CollectionHelper.toString(ResourceFormatter.Default::format, Separator.LineSeparator, unlockable.getCosts()));
}
public void setOnClickListener(Unlockable unlockable){
buyButton.setOnClickListener(UnlockListener.newListener(unlockable));
if (unlockable instanceof ResourceUnlockable) {
ResourceUnlockable resourceUnlockable = (ResourceUnlockable)unlockable;
unlockableIcon.setImageResource(resourceUnlockable.getResourceIconID());
}
}
}

2
app/src/main/java/com/futurumgame/base/unlockables/ResourceUnlockable.java

@ -56,6 +56,8 @@ public class ResourceUnlockable extends Unlockable {
return resource.getID();
}
public int getResourceIconID() { return resource.getResourceIconId(); }
public Units getStartCap() {
return startCap;
}

BIN
app/src/main/res/drawable/ingot_base.png

After

Width: 64  |  Height: 64  |  Size: 745 B

BIN
app/src/main/res/drawable/reset_button.png

After

Width: 128  |  Height: 128  |  Size: 3.6 KiB

BIN
app/src/main/res/drawable/settings_button.png

After

Width: 568  |  Height: 422  |  Size: 35 KiB

BIN
app/src/main/res/drawable/soil_icon.png

After

Width: 64  |  Height: 64  |  Size: 458 B

BIN
app/src/main/res/drawable/sound_off_button.png

After

Width: 449  |  Height: 449  |  Size: 18 KiB

BIN
app/src/main/res/drawable/sound_on_button.png

After

Width: 449  |  Height: 449  |  Size: 15 KiB

BIN
app/src/main/res/drawable/water_icon.png

After

Width: 64  |  Height: 64  |  Size: 795 B

BIN
app/src/main/res/drawable/wood_icon.png

After

Width: 64  |  Height: 64  |  Size: 681 B

35
app/src/main/res/layout/activity_main.xml

@ -21,37 +21,50 @@
<com.futurumgame.base.gameinternals.FactorySystem
android:id="@+id/FactorySystem"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_width="310dp"
android:layout_height="269dp"
android:background="#131313"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Resources" >
app:layout_constraintTop_toBottomOf="@+id/Resources"
app:layout_constraintVertical_bias="0.064">
</com.futurumgame.base.gameinternals.FactorySystem>
<ImageButton
android:id="@+id/researchButton"
android:layout_width="123dp"
android:layout_height="82dp"
android:layout_marginTop="104dp"
android:layout_width="90dp"
android:layout_height="64dp"
android:background="@drawable/research_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.708"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="@+id/unlockButton"
app:layout_constraintVertical_bias="0.0" />
<ImageButton
android:id="@+id/unlockButton"
android:layout_width="93dp"
android:layout_width="90dp"
android:layout_height="64dp"
android:background="@drawable/unlock_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.223"
app:layout_constraintHorizontal_bias="0.059"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.182" />
app:layout_constraintVertical_bias="0.902" />
<ImageButton
android:id="@+id/settingsButton"
android:layout_width="90dp"
android:layout_height="64dp"
android:background="@drawable/settings_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.644"
app:layout_constraintStart_toEndOf="@+id/researchButton"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.902" />
</androidx.constraintlayout.widget.ConstraintLayout>

11
app/src/main/res/layout/factory_manager_view.xml

@ -23,14 +23,16 @@
<ImageButton
android:id="@+id/backButton"
android:layout_width="77dp"
android:layout_height="68dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:background="@drawable/back_button"
android:soundEffectsEnabled="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.758" />
app:layout_constraintVertical_bias="0.9" />
<ImageButton
android:id="@+id/upgradeButton"
@ -42,5 +44,6 @@
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.543" />
app:layout_constraintVertical_bias="0.543"
android:soundEffectsEnabled="false" />
</androidx.constraintlayout.widget.ConstraintLayout>

4
app/src/main/res/layout/list_item_view.xml

@ -13,7 +13,7 @@
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:id="@+id/itemIcon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
@ -28,7 +28,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintStart_toEndOf="@+id/itemIcon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.509"
tools:text="Item" />

8
app/src/main/res/layout/list_price_item_view.xml

@ -13,7 +13,7 @@
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:id="@+id/itemIcon"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@mipmap/ic_launcher_round"
@ -27,7 +27,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintStart_toEndOf="@+id/itemIcon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.509"
tools:text="Item" />
@ -37,6 +37,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Costs"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/ItemText" />
@ -49,6 +50,7 @@
android:background="@drawable/buy_button"
app:layout_constraintEnd_toStartOf="@+id/Prize"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/buy_button" />
app:srcCompat="@drawable/buy_button"
android:soundEffectsEnabled="false" />
</androidx.constraintlayout.widget.ConstraintLayout>

77
app/src/main/res/layout/options_view.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#131313"
tools:context=".ui.activities.OptionsViewActivity">
<ImageButton
android:id="@+id/soundButton"
android:layout_width="75dp"
android:layout_height="75dp"
android:background="@drawable/sound_on_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.217"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.153" />
<ImageButton
android:id="@+id/optionsReturnButton"
android:layout_width="70dp"
android:layout_height="70dp"
android:background="@drawable/back_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.176"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.927" />
<ImageButton
android:id="@+id/HardReset"
android:layout_width="75dp"
android:layout_height="75dp"
android:background="@drawable/reset_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.217"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.339" />
<TextView
android:id="@+id/muteTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/muli"
android:text="Mute\nSound"
android:textAlignment="center"
android:textColor="#E5E5E5"
android:textSize="26sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.625"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.152" />
<TextView
android:id="@+id/HardResetTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/muli"
android:text="Hardreset"
android:textColor="#E5E5E5"
android:textSize="26sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.718"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.342" />
</androidx.constraintlayout.widget.ConstraintLayout>

18
app/src/main/res/layout/resource_view.xml

@ -74,19 +74,21 @@
app:layout_constraintHorizontal_bias="0.915"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.679" />
app:layout_constraintVertical_bias="0.679"
android:soundEffectsEnabled="false" />
<ImageButton
android:id="@+id/backButton2"
android:layout_width="113dp"
android:layout_height="92dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:background="@drawable/back_button"
android:soundEffectsEnabled="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.503"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.865" />
app:layout_constraintVertical_bias="0.9" />
<ImageButton
android:id="@+id/factoryButton"
@ -98,7 +100,8 @@
app:layout_constraintHorizontal_bias="0.084"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.679" />
app:layout_constraintVertical_bias="0.679"
android:soundEffectsEnabled="false" />
<ImageButton
android:id="@+id/Collect"
@ -110,6 +113,7 @@
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.679" />
app:layout_constraintVertical_bias="0.679"
android:soundEffectsEnabled="false" />
</androidx.constraintlayout.widget.ConstraintLayout>

9
app/src/main/res/layout/unlock_view.xml

@ -18,14 +18,15 @@
<ImageButton
android:id="@+id/GoBack"
android:layout_width="93dp"
android:layout_height="85dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginTop="480dp"
android:background="@drawable/back_button"
android:soundEffectsEnabled="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintHorizontal_bias="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/Unlockables"
app:layout_constraintVertical_bias="0.0" />
app:layout_constraintVertical_bias="0.6" />
</androidx.constraintlayout.widget.ConstraintLayout>

BIN
app/src/main/res/raw/click.ogg

109
app/src/test/java/com/futurumgame/base/CollectionHelperTest.java

@ -0,0 +1,109 @@
package com.futurumgame.base;
import com.futurumgame.base.interfaces.IMapper;
import com.futurumgame.base.util.CollectionHelper;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class CollectionHelperTest {
@Test
public void testAddAll() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
List<Integer> testList2 = new ArrayList<>(Arrays.asList(1, 5, -2, 0, 15));
List<Object> testList3 = new ArrayList<>(Arrays.asList(1, 5.6, -56.2, "Hi", true));
CollectionHelper.addAll(testList1, "Does", "This", "Work");
CollectionHelper.addAll(testList2, 34, 42, -42);
CollectionHelper.addAll(testList3, "17", 4);
assertEquals("World", testList1.get(1));
assertEquals("Does", testList1.get(4));
assertTrue(1 == new Integer(testList2.get(0)));
assertTrue(42 == new Integer(testList2.get(6)));
assertTrue(5.6 == (double)testList3.get(1));
assertTrue("17" == (String)testList3.get(5));
List<String> addedList = new ArrayList<>(Arrays.asList("Hi", "What's up"));
CollectionHelper.addAll(testList1, addedList);
assertEquals("This", testList1.get(5));
assertEquals("Hi", testList1.get(7));
}
@Test
public void testAsCollection() {
Iterable<String> generatedIterable = CollectionHelper.asIterable("Hello", "World");
List<String> generatedList = CollectionHelper.asList(generatedIterable);
assertEquals("Hello", generatedList.get(0));
assertEquals("World", generatedList.get(1));
}
@Test
public void testContains() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
assertTrue(CollectionHelper.contains(testList1, p -> p.equals("Hello")));
assertFalse(CollectionHelper.contains(testList1, p -> p.equals("Hi")));
}
@Test
public void testListEquals() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
List<String> testList2 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
List<String> testList3 = new ArrayList<>(Arrays.asList("Hi", "What's up"));
assertTrue(CollectionHelper.sequenceEquals(testList1, testList2));
assertFalse(CollectionHelper.sequenceEquals(testList1, testList3));
}
@Test
public void testToMap() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
Map<Integer, String> generatedMap = CollectionHelper.toMap(testList1, u -> testList1.indexOf(u));
assertEquals("Hello", generatedMap.get(0));
assertEquals("World", generatedMap.get(1));
assertEquals("or", generatedMap.get(2));
assertEquals("test", generatedMap.get(3));
}
@Test
public void testWhere() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
List<String> testList2 = new ArrayList<>(Arrays.asList("Hello", "World", null, "test"));
assertEquals(testList1, CollectionHelper.whereNotNull(testList1));
List<String> nullStrippedList = new ArrayList<>(Arrays.asList("Hello", "World", "test"));
assertTrue(CollectionHelper.sequenceEquals(CollectionHelper.whereNotNull(testList2), nullStrippedList));
}
@Test
public void testToString() {
List<String> testList1 = new ArrayList<>(Arrays.asList("Hello", "World", "or", "test"));
List<Integer> testList2 = new ArrayList<>(Arrays.asList(1, 5, -2, 0, 15));
List<Object> testList3 = new ArrayList<>(Arrays.asList(1, 5.6, -56.2, "Hi", true));
String[] testArray1 = {"Hello", "World", "or", "test"};
Object[] testArray2 = {1, 5.6, -56.2, "Hi", true};
assertEquals("Hello, World, or, test", CollectionHelper.toString(testList1));
assertEquals("1, 5, -2, 0, 15", CollectionHelper.toString(testList2));
assertEquals("1, 5.6, -56.2, Hi, true", CollectionHelper.toString(testList3));
assertEquals("Hello, World, or, test", CollectionHelper.toString(testArray1));
assertEquals("1, 5.6, -56.2, Hi, true", CollectionHelper.toString(testArray2));
}
}
Loading…
Cancel
Save