Fixes for the most "popular" and puzzling crashes on GPlay,

supposedly caused by extreme race conditions.
This commit is contained in:
Zukero
2019-02-22 21:02:35 +01:00
parent 72a36a7c12
commit 1dbf4bf5cb
9 changed files with 27 additions and 13 deletions

View File

@@ -308,7 +308,7 @@ public final class MainActivity
@Override
public void onPlayerMoved(Coord newPosition, Coord previousPosition) { }
public void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition) { }
@Override
public void onPlayerEnteredNewMap(PredefinedMap map, Coord p) { }

View File

@@ -79,6 +79,9 @@ public final class HeroinfoActivity_Inventory extends Fragment implements Custom
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.heroinfo_inventory, container, false);
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity());
if (!app.isInitialized()) return v;
inventoryList = (ListView) v.findViewById(R.id.inventorylist_root);
ImageView heroicon = (ImageView) v.findViewById(R.id.heroinfo_inventory_heroicon);
heroinfo_stats_gold = (TextView) v.findViewById(R.id.heroinfo_stats_gold);

View File

@@ -51,7 +51,10 @@ public final class HeroinfoActivity_Quests extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.questlog, container, false);
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity());
if (!app.isInitialized()) return v;
Context ctx = getActivity();

View File

@@ -48,7 +48,10 @@ public final class HeroinfoActivity_Skills extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.heroinfo_skill_list, container, false);
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity());
if (!app.isInitialized()) return v;
final Activity ctx = getActivity();
new SpinnerEmulator(v,R.id.skillList_category_filters_button, R.array.skill_category_filters, R.string.heroinfo_skill_categories) {

View File

@@ -67,10 +67,14 @@ public final class HeroinfoActivity_Stats extends Fragment {
View v = inflater.inflate(R.layout.heroinfo_stats, container, false);
view = v;
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity());
if (!app.isInitialized()) return v;
TextView tv = (TextView) v.findViewById(R.id.heroinfo_title);
tv.setText(player.getName());
tv.setCompoundDrawablesWithIntrinsicBounds(HeroCollection.getHeroLargeSprite(player.iconID), 0, 0, 0);
if (tv != null) {
tv.setText(player.getName());
tv.setCompoundDrawablesWithIntrinsicBounds(HeroCollection.getHeroLargeSprite(player.iconID), 0, 0, 0);
}
heroinfo_container = (ViewGroup) v.findViewById(R.id.heroinfo_container);
heroinfo_reequip_cost = (TextView) v.findViewById(R.id.heroinfo_reequip_cost);
heroinfo_useitem_cost = (TextView) v.findViewById(R.id.heroinfo_useitem_cost);

View File

@@ -246,7 +246,7 @@ public final class MovementController implements TimedMessageTask.Callback {
@Override
public void onVisualEffectCompleted(int callbackValue) {
playerMovementListeners.onPlayerMoved(newPosition, player.lastPosition);
playerMovementListeners.onPlayerMoved(currentMap, newPosition, player.lastPosition);
controllers.mapController.handleMapEventsAfterMovement(currentMap, newPosition, player.lastPosition);
if (!world.model.uiSelections.isInCombat) {

View File

@@ -4,6 +4,6 @@ import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.util.Coord;
public interface PlayerMovementListener {
void onPlayerMoved(Coord newPosition, Coord previousPosition);
void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition);
void onPlayerEnteredNewMap(PredefinedMap map, Coord p);
}

View File

@@ -6,8 +6,8 @@ import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class PlayerMovementListeners extends ListOfListeners<PlayerMovementListener> implements PlayerMovementListener {
private final Function2<PlayerMovementListener, Coord, Coord> onPlayerMoved = new Function2<PlayerMovementListener, Coord, Coord>() {
@Override public void call(PlayerMovementListener listener, Coord newPosition, Coord previousPosition) { listener.onPlayerMoved(newPosition, previousPosition); }
private final Function3<PlayerMovementListener, PredefinedMap, Coord, Coord> onPlayerMoved = new Function3<PlayerMovementListener, PredefinedMap, Coord, Coord>() {
@Override public void call(PlayerMovementListener listener, PredefinedMap map, Coord newPosition, Coord previousPosition) { listener.onPlayerMoved(map, newPosition, previousPosition); }
};
private final Function2<PlayerMovementListener, PredefinedMap, Coord> onPlayerEnteredNewMap = new Function2<PlayerMovementListener, PredefinedMap, Coord>() {
@@ -15,8 +15,8 @@ public final class PlayerMovementListeners extends ListOfListeners<PlayerMovemen
};
@Override
public void onPlayerMoved(Coord newPosition, Coord previousPosition) {
callAllListeners(this.onPlayerMoved, newPosition, previousPosition);
public void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition) {
callAllListeners(this.onPlayerMoved, map, newPosition, previousPosition);
}
@Override

View File

@@ -665,7 +665,8 @@ public final class MainView extends SurfaceView
@Override
public void onPlayerMoved(Coord newPosition, Coord previousPosition) {
public void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition) {
if (map != currentMap) return;
recalculateMapTopLeft(newPosition, preferences.enableUiAnimations);
redrawAll(RedrawAllDebugReason.PlayerMoved);
}