aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaksymilian Jopek <maks@jopek.eu>2022-12-12 21:03:38 +0100
committerMaksymilian Jopek <maks@jopek.eu>2022-12-12 21:03:38 +0100
commitac68cc82ddac8d4e1563af505cb5b3b71b8cf120 (patch)
tree4d95a353c0d5413a7345f7ee79620dd3e4d536ff
parent82652521d71c7fb01762203d740b7c73068098c0 (diff)
downloadpai-fillo-nai-ac68cc82ddac8d4e1563af505cb5b3b71b8cf120.tar.gz
pai-fillo-nai-ac68cc82ddac8d4e1563af505cb5b3b71b8cf120.tar.zst
pai-fillo-nai-ac68cc82ddac8d4e1563af505cb5b3b71b8cf120.zip
v1.2.0
All improvements done
-rw-r--r--.idea/deploymentTargetDropDown.xml17
-rw-r--r--app/build.gradle14
-rw-r--r--app/src/main/java/com/jopek/pai_fillo_nai/Bot.java8
-rw-r--r--app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java282
-rw-r--r--app/src/main/res/layout-land/activity_main.xml52
-rw-r--r--app/src/main/res/layout-land/activity_online_game.xml133
-rw-r--r--build.gradle2
7 files changed, 358 insertions, 150 deletions
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..55f5375
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="deploymentTargetDropDown">
+ <runningDeviceTargetSelectedWithDropDown>
+ <Target>
+ <type value="RUNNING_DEVICE_TARGET" />
+ <deviceKey>
+ <Key>
+ <type value="SERIAL_NUMBER" />
+ <value value="290c726c731c7ece" />
+ </Key>
+ </deviceKey>
+ </Target>
+ </runningDeviceTargetSelectedWithDropDown>
+ <timeTargetWasSelectedWithDropDown value="2022-12-12T19:13:28.469126Z" />
+ </component>
+</project> \ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 96f4dfc..1da03cc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,6 +1,6 @@
plugins {
id 'com.android.application'
-// id 'com.google.gms.google-services'
+ id 'com.google.gms.google-services'
}
android {
@@ -40,12 +40,12 @@ android {
dependencies {
- implementation 'androidx.appcompat:appcompat:1.4.1'
- implementation 'com.google.android.material:material:1.6.0'
+ implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
-// implementation 'com.google.firebase:firebase-database:19.2.1'
-// implementation 'com.google.firebase:firebase-database'
+ implementation 'com.google.firebase:firebase-database:20.1.0'
+ implementation 'com.google.firebase:firebase-database'
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.4'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
} \ No newline at end of file
diff --git a/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java b/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java
index 4b04a55..523da7b 100644
--- a/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java
+++ b/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java
@@ -1,5 +1,7 @@
package com.jopek.pai_fillo_nai;
+import android.os.Build;
+
import java.util.Arrays;
public class Bot {
@@ -38,7 +40,7 @@ public class Bot {
if (score == -10)
return score;
- if (isntBoardFull() == false)
+ if (!isntBoardFull())
return 0;
int best;
@@ -73,7 +75,9 @@ public class Bot {
int bestVal = -1000;
int bestMove = -1;
- if(Arrays.stream(board).filter(c -> c == -1).count() == 9) return 4;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ if(Arrays.stream(board).filter(c -> c == -1).count() == 9) return 4;
+ }
for (int i = 0; i < board.length; i++) {
if (board[i] == -1) {
diff --git a/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java b/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java
index 71c1267..461c1b1 100644
--- a/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java
+++ b/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java
@@ -15,11 +15,12 @@ import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
-//import com.google.firebase.database.DataSnapshot;
-//import com.google.firebase.database.DatabaseError;
-//import com.google.firebase.database.DatabaseReference;
-//import com.google.firebase.database.FirebaseDatabase;
-//import com.google.firebase.database.ValueEventListener;
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.database.DataSnapshot;
+import com.google.firebase.database.DatabaseError;
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Arrays;
@@ -38,8 +39,8 @@ public class OnlineGameActivity extends AppCompatActivity {
Arrays.asList(-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L)
);
List<ImageView> squares = new ArrayList<>();
-// DatabaseReference rooms;
-// DatabaseReference room;
+ DatabaseReference rooms;
+ DatabaseReference room;
// FinishGameAlert
AlertDialog fgAlert = null;
long whoami = 0;
@@ -48,7 +49,7 @@ public class OnlineGameActivity extends AppCompatActivity {
boolean revengeRequested = false;
String TAG = "maks";
ImageView p0Img;
- ImageView p1Img;
+ //ImageView p1Img;
ImageView square0, square1, square2, square3, square4, square5, square6, square7, square8;
TextView tvName;
@@ -59,9 +60,10 @@ public class OnlineGameActivity extends AppCompatActivity {
getSupportActionBar().hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_online_game);
+ FirebaseApp.initializeApp(this);
p0Img = findViewById(R.id.p0Img);
- p1Img = findViewById(R.id.p1Img);
+ //p1Img = findViewById(R.id.p1Img);
tvName = findViewById(R.id.onPlayerName);
square0 = findViewById(R.id.square0);
@@ -80,7 +82,7 @@ public class OnlineGameActivity extends AppCompatActivity {
square.setOnClickListener(view -> onSquareClick((ImageView) view, finalI));
i++;
}
-// rooms = FirebaseDatabase.getInstance("https://pai-fillo-nai-default-rtdb.europe-west1.firebasedatabase.app/").getReference("rooms");
+ rooms = FirebaseDatabase.getInstance("https://pai-fillo-nai-default-rtdb.europe-west1.firebasedatabase.app/").getReference("rooms");
askForRoomId(false);
}
@@ -114,7 +116,7 @@ public class OnlineGameActivity extends AppCompatActivity {
whoami = rand.nextInt(2);
tvName.setText("You're player 1 (playing as " + (whoami == 0 ? "O" : "X") + ")");
-// room = rooms.child(rid);
+ room = rooms.child(rid);
Map<String, Object> data = new HashMap<>();
data.put("started", 0);
data.put("player1", whoami);
@@ -124,32 +126,32 @@ public class OnlineGameActivity extends AppCompatActivity {
data.put("winner", -1);
data.put("revenge0", -1);
data.put("revenge1", -1);
-// room.setValue(data);
+ room.setValue(data);
waitFor2Player(rid);
} else {
-// rooms.child(roomId).addListenerForSingleValueEvent(new ValueEventListener() {
-// @Override
-// public void onDataChange(DataSnapshot dataSnapshot) {
-// if (!(dataSnapshot.getValue() instanceof HashMap)) {
-// askForRoomId(true);
-// }
-// HashMap data = (HashMap) dataSnapshot.getValue();
-// if ((long) data.get("started") == 1) {
-// askForRoomId(true);
-// }
-// whoami = (long) data.get("player2");
-// whoseTurn = (long) data.get("whoseTurn");
-// tvName.setText("You're player 1 (playing as " + (whoami == 0 ? "O" : "X") + ")");
-// room = rooms.child(roomId);
-// startGame(true);
-// }
-//
-// @Override
-// public void onCancelled(DatabaseError databaseError) {
-// askForRoomId(true);
-// }
-// });
+ rooms.child(roomId).addListenerForSingleValueEvent(new ValueEventListener() {
+ @Override
+ public void onDataChange(DataSnapshot dataSnapshot) {
+ if (!(dataSnapshot.getValue() instanceof HashMap)) {
+ askForRoomId(true);
+ }
+ HashMap data = (HashMap) dataSnapshot.getValue();
+ if ((long) data.get("started") == 1) {
+ askForRoomId(true);
+ }
+ whoami = (long) data.get("player2");
+ whoseTurn = (long) data.get("whoseTurn");
+ tvName.setText("You're player 1 (playing as " + (whoami == 0 ? "O" : "X") + ")");
+ room = rooms.child(roomId);
+ startGame(true);
+ }
+
+ @Override
+ public void onCancelled(DatabaseError databaseError) {
+ askForRoomId(true);
+ }
+ });
}
}
@@ -163,92 +165,92 @@ public class OnlineGameActivity extends AppCompatActivity {
alert.show();
alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
-// room.addValueEventListener(new ValueEventListener() {
-// @Override
-// public void onDataChange(DataSnapshot dataSnapshot) {
-// HashMap data = (HashMap) dataSnapshot.getValue();
-// if ((long) data.get("started") == 1) {
-// room.removeEventListener(this);
-// alert.dismiss();
-// startGame(false);
-// }
-// }
-//
-// @Override
-// public void onCancelled(DatabaseError databaseError) {
-// Log.d(TAG, "onCancelled: Waiter Value Event Listener");
-// }
-// });
+ room.addValueEventListener(new ValueEventListener() {
+ @Override
+ public void onDataChange(DataSnapshot dataSnapshot) {
+ HashMap data = (HashMap) dataSnapshot.getValue();
+ if ((long) data.get("started") == 1) {
+ room.removeEventListener(this);
+ alert.dismiss();
+ startGame(false);
+ }
+ }
+
+ @Override
+ public void onCancelled(DatabaseError databaseError) {
+ Log.d(TAG, "onCancelled: Waiter Value Event Listener");
+ }
+ });
}
-// protected void startGame(boolean markStarted) {
-// if (markStarted) {
-// room.child("started").setValue(1);
-// }
-// room.addValueEventListener(new ValueEventListener() {
-// @Override
-// public void onDataChange(DataSnapshot dataSnapshot) {
-// HashMap data = (HashMap) dataSnapshot.getValue();
-// if (data == null) {
-// room.removeEventListener(this);
-// return;
-// }
-//
-// Log.d(TAG, "onDataChange: " + Arrays.toString(data.entrySet().toArray()));
-// gameBoard = (List) data.get("board");
-// Log.d(TAG, "onDataChange: " + Arrays.toString(gameBoard.toArray()));
-// whoseTurn = (long) data.get("whoseTurn");
-// myTurn = whoseTurn == whoami;
-// playTurn();
-// long winner = (long) data.get("winner");
-// long opRevenge = (long) data.get("revenge" + (whoami == 0 ? 1 : 0));
-// revengePossible = opRevenge != 0;
-// if (revengeRequested && winner == -1) {
-// myTurn = whoami == (long) data.get("whoseTurn");
-// revengePossible = true;
-// revengeRequested = false;
-// gameWasEnd = false;
-// playTurn();
-// } else if (!revengePossible && revengeRequested) {
-// fgAlert.dismiss();
-// new AlertDialog.Builder(OnlineGameActivity.this)
-// .setTitle("Sad info")
-// .setMessage("Second player don't want to play with ya :(")
-// .setCancelable(false)
-// .setNegativeButton("Go to menu without friend", (dialog, which) -> {
-// room.removeValue();
-// Intent intent = new Intent(OnlineGameActivity.this, MainActivity.class);
-// startActivity(intent);
-// })
-// .setIcon(R.drawable.ic_baseline_gamepad_24)
-// .show();
-// } else if (opRevenge == 1 && revengeRequested) {
-// Map<String, Object> data2 = new HashMap<>();
-// gameBoard = new ArrayList<>(Arrays.asList(-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L));
-// data2.put("started", 1);
-// data2.put("player1", whoami);
-// data2.put("player2", whoami == 0 ? 1L : 0L);
-// data2.put("whoseTurn", new Long(ThreadLocalRandom.current().nextInt(0, 1 + 1)));
-// data2.put("board", gameBoard);
-// data2.put("winner", -1L);
-// data2.put("revenge0", -1L);
-// data2.put("revenge1", -1L);
-// myTurn = whoami == (long) data2.get("whoseTurn");
-// room.setValue(data2);
-// playTurn();
-// }
-//
-// if (winner != -1) {
-// endGame(winner);
-// }
-// }
-//
-// @Override
-// public void onCancelled(DatabaseError databaseError) {
-// Log.d(TAG, "onCancelled: Main Value Event Listener");
-// }
-// });
-// }
+ protected void startGame(boolean markStarted) {
+ if (markStarted) {
+ room.child("started").setValue(1);
+ }
+ room.addValueEventListener(new ValueEventListener() {
+ @Override
+ public void onDataChange(DataSnapshot dataSnapshot) {
+ HashMap data = (HashMap) dataSnapshot.getValue();
+ if (data == null) {
+ room.removeEventListener(this);
+ return;
+ }
+
+ Log.d(TAG, "onDataChange: " + Arrays.toString(data.entrySet().toArray()));
+ gameBoard = (List) data.get("board");
+ Log.d(TAG, "onDataChange: " + Arrays.toString(gameBoard.toArray()));
+ whoseTurn = (long) data.get("whoseTurn");
+ myTurn = whoseTurn == whoami;
+ playTurn();
+ long winner = (long) data.get("winner");
+ long opRevenge = (long) data.get("revenge" + (whoami == 0 ? 1 : 0));
+ revengePossible = opRevenge != 0;
+ if (revengeRequested && winner == -1) {
+ myTurn = whoami == (long) data.get("whoseTurn");
+ revengePossible = true;
+ revengeRequested = false;
+ gameWasEnd = false;
+ playTurn();
+ } else if (!revengePossible && revengeRequested) {
+ fgAlert.dismiss();
+ new AlertDialog.Builder(OnlineGameActivity.this)
+ .setTitle("Sad info")
+ .setMessage("Second player don't want to play with ya :(")
+ .setCancelable(false)
+ .setNegativeButton("Go to menu without friend", (dialog, which) -> {
+ room.removeValue();
+ Intent intent = new Intent(OnlineGameActivity.this, MainActivity.class);
+ startActivity(intent);
+ })
+ .setIcon(R.drawable.ic_baseline_gamepad_24)
+ .show();
+ } else if (opRevenge == 1 && revengeRequested) {
+ Map<String, Object> data2 = new HashMap<>();
+ gameBoard = new ArrayList<>(Arrays.asList(-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L));
+ data2.put("started", 1);
+ data2.put("player1", whoami);
+ data2.put("player2", whoami == 0 ? 1L : 0L);
+ data2.put("whoseTurn", new Long(ThreadLocalRandom.current().nextInt(0, 1 + 1)));
+ data2.put("board", gameBoard);
+ data2.put("winner", -1L);
+ data2.put("revenge0", -1L);
+ data2.put("revenge1", -1L);
+ myTurn = whoami == (long) data2.get("whoseTurn");
+ room.setValue(data2);
+ playTurn();
+ }
+
+ if (winner != -1) {
+ endGame(winner);
+ }
+ }
+
+ @Override
+ public void onCancelled(DatabaseError databaseError) {
+ Log.d(TAG, "onCancelled: Main Value Event Listener");
+ }
+ });
+ }
protected void playTurn() {
int i = 0;
@@ -270,8 +272,8 @@ public class OnlineGameActivity extends AppCompatActivity {
}
protected void finishTurn() {
-// room.child("whoseTurn").setValue(whoseTurn);
-// room.child("board").setValue(gameBoard);
+ room.child("whoseTurn").setValue(whoseTurn);
+ room.child("board").setValue(gameBoard);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@@ -319,26 +321,26 @@ public class OnlineGameActivity extends AppCompatActivity {
gameWasEnd = true;
finishTurn();
-// room.child("winner").setValue(whoWon);
-// AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this)
-// .setTitle(whoWon == 2 ? "DRAW" : "Player " + (whoWon + 1) + " WON")
-// .setMessage(whoWon == 2 ? "Maybe next time" : "Congratulations to Player " + (whoWon + 1))
-// .setCancelable(false)
-// .setPositiveButton("Request revenge", (dialog, which) -> {
-// revengeRequested = true;
-// room.child("revenge" + whoami).setValue(1);
-// })
-// .setNegativeButton("Go to menu", (dialog, which) -> {
-// room.child("revenge" + whoami).setValue(0);
-// if (!revengePossible) {
-// room.removeValue();
-// }
-// Intent intent = new Intent(OnlineGameActivity.this, MainActivity.class);
-// startActivity(intent);
-// })
-// .setIcon(R.drawable.ic_baseline_gamepad_24);
-// fgAlert = alertBuilder.create();
-// fgAlert.show();
+ room.child("winner").setValue(whoWon);
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this)
+ .setTitle(whoWon == 2 ? "DRAW" : "Player " + (whoWon + 1) + " WON")
+ .setMessage(whoWon == 2 ? "Maybe next time" : "Congratulations to Player " + (whoWon + 1))
+ .setCancelable(false)
+ .setPositiveButton("Request revenge", (dialog, which) -> {
+ revengeRequested = true;
+ room.child("revenge" + whoami).setValue(1);
+ })
+ .setNegativeButton("Go to menu", (dialog, which) -> {
+ room.child("revenge" + whoami).setValue(0);
+ if (!revengePossible) {
+ room.removeValue();
+ }
+ Intent intent = new Intent(OnlineGameActivity.this, MainActivity.class);
+ startActivity(intent);
+ })
+ .setIcon(R.drawable.ic_baseline_gamepad_24);
+ fgAlert = alertBuilder.create();
+ fgAlert.show();
}
// CheckTripleEqualityOnGameBoard
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
new file mode 100644
index 0000000..eb03ff8
--- /dev/null
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -0,0 +1,52 @@
+<?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"
+ tools:context=".MainActivity">
+<LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@mipmap/main_bg_foreground"
+ >
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:text="Pai Fillo Nai"
+ android:textColor="@color/white"
+ android:textSize="60sp"/>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:padding="20dp"
+ >
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:text="ONLINE"
+ android:id="@+id/txtvOnline"
+ android:layout_margin="20dp"
+ android:textColor="#03A9F4"
+ android:background="@drawable/bg_rounded_rectangle"
+ android:textSize="30sp"/>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:text="OFFLINE"
+ android:layout_margin="20dp"
+ android:textColor="#AAAAAA"
+ android:id="@+id/txtvOffline"
+ android:background="@drawable/bg_rounded_rectangle"
+ android:textSize="30sp"/>
+ </LinearLayout>
+</LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_online_game.xml b/app/src/main/res/layout-land/activity_online_game.xml
new file mode 100644
index 0000000..19ff086
--- /dev/null
+++ b/app/src/main/res/layout-land/activity_online_game.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@mipmap/bg_offline_game_foreground"
+ tools:context=".OfflineGameActivity">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="2">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="2"
+ android:layout_margin="20dp"
+ android:background="@drawable/bg_rounded_blue"
+ android:orientation="vertical">
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:textSize="30sp"
+ android:textColor="@color/white"
+ android:gravity="center"
+ android:id="@+id/onPlayerName"
+ android:textAlignment="center"
+ android:text="Second Player (X)" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/p0Img"
+ android:src="@mipmap/bg_no_no_foreground"
+ android:layout_weight="1" />
+ </LinearLayout>
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@drawable/bg_rounded_grey"
+ android:layout_margin="5dp"
+ android:layout_weight="1">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:padding="10dp">
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square0"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square1"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square2"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:padding="10dp">
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square3"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square4"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square5"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:padding="10dp">
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square6"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square7"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@mipmap/emptiness_foreground"
+ android:id="@+id/square8"
+ android:layout_margin="10dp"
+ android:layout_weight="1" />
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/build.gradle b/build.gradle
index a95d7d0..62bb4b1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,6 @@
buildscript {
dependencies {
-// classpath 'com.google.gms:google-services:4.3.10'
+ classpath 'com.google.gms:google-services:4.3.14'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {