diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
new file mode 100644
index 000000000..53994f239
--- /dev/null
+++ b/.github/workflows/android.yml
@@ -0,0 +1,26 @@
+name: Android CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ java-version: '11'
+ distribution: 'adopt'
+ cache: gradle
+
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
+ - name: Build with Gradle
+ run: ./gradlew build
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 000000000..e9969a1c2
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 000000000..a5f05cd8c
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0d17b9380..e1558670d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -26,4 +26,4 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-}
+}
\ No newline at end of file
diff --git a/app/google-services.json b/app/google-services.json
new file mode 100644
index 000000000..228129634
--- /dev/null
+++ b/app/google-services.json
@@ -0,0 +1,39 @@
+{
+ "project_info": {
+ "project_number": "520311220155",
+ "project_id": "cmput301firestore",
+ "storage_bucket": "cmput301firestore.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:520311220155:android:c59c1e78e27e014953869e",
+ "android_client_info": {
+ "package_name": "com.example.simpleparadox.listycity"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "520311220155-nh05qmeo58vsv948in26lcdtpjcnu3i1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCBO4K4e_EdJRN4ePt5WIwl29e_kBAbv5U"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "520311220155-nh05qmeo58vsv948in26lcdtpjcnu3i1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7c224868e..ba929cf71 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,7 +9,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
diff --git a/app/src/main/java/com/example/simpleparadox/listycity/City.java b/app/src/main/java/com/example/simpleparadox/listycity/City.java
index fb6fbd1d1..969fbce4c 100644
--- a/app/src/main/java/com/example/simpleparadox/listycity/City.java
+++ b/app/src/main/java/com/example/simpleparadox/listycity/City.java
@@ -4,7 +4,7 @@ public class City {
private String city;
private String province;
- City(String city, String province){
+ public City(String city, String province){
this.city = city;
this.province = province;
}
diff --git a/app/src/main/java/com/example/simpleparadox/listycity/CustomList.java b/app/src/main/java/com/example/simpleparadox/listycity/CustomList.java
index 1a7af1f60..3607faef3 100644
--- a/app/src/main/java/com/example/simpleparadox/listycity/CustomList.java
+++ b/app/src/main/java/com/example/simpleparadox/listycity/CustomList.java
@@ -47,4 +47,21 @@ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup
return view;
}
+
+ /**
+ * this function will get the size of list
+ * @return
+ */
+ public int getCount() {
+ return cities.size();
+ }
+
+ /**
+ * this function will add a city object into the list
+ * @param city
+ */
+ public void addCity(City city) {
+ cities.add(city);
+ return;
+ }
}
diff --git a/app/src/main/java/com/example/simpleparadox/listycity/MainActivity.java b/app/src/main/java/com/example/simpleparadox/listycity/MainActivity.java
index 5d276ec77..8279723dd 100644
--- a/app/src/main/java/com/example/simpleparadox/listycity/MainActivity.java
+++ b/app/src/main/java/com/example/simpleparadox/listycity/MainActivity.java
@@ -1,15 +1,31 @@
package com.example.simpleparadox.listycity;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.OnSuccessListener;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.EventListener;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.FirebaseFirestoreException;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
+
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
@@ -20,6 +36,12 @@ public class MainActivity extends AppCompatActivity {
CustomList customList;
+ final String TAG = "Sample";
+ Button addCityButton;
+ EditText addCityEditText;
+ EditText addProvinceEditText;
+ FirebaseFirestore db;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -27,28 +49,76 @@ protected void onCreate(Bundle savedInstanceState) {
cityList = findViewById(R.id.city_list);
- String []cities ={"Edmonton", "Vancouver", "Toronto", "Hamilton", "Denver", "Los Angeles"};
- String []provinces = {"AB", "BC", "ON", "ON", "CO", "CA"};
+ addCityButton = findViewById(R.id.add_city_button);
+ addCityEditText = findViewById(R.id.add_city_field);
+ addProvinceEditText = findViewById(R.id.add_province_edit_text);
cityDataList = new ArrayList<>();
- for(int i=0;i();
-// dataList.addAll(Arrays.asList(cities));
-//
-// cityAdapter = new ArrayAdapter<>(this, R.layout.content, dataList);
-//
-// cityList.setAdapter(cityAdapter);
-
-
+ db = FirebaseFirestore.getInstance();
+
+ final CollectionReference collectionReference = db.collection("Cities");
+
+
+ addCityButton.setOnClickListener( new View.OnClickListener() {
+ @Override
+ public void onClick(View view) { // or Firestore View?
+
+ final String cityName = addCityEditText.getText().toString();
+ final String provinceName = addProvinceEditText.getText().toString();
+
+ HashMap data = new HashMap<>();
+
+ if (cityName.length()>0 && provinceName.length()>0) {
+ data.put("Province Name", provinceName);
+ collectionReference
+ .document(cityName)
+ .set(data)
+ .addOnSuccessListener(new OnSuccessListener() {
+ @Override
+ public void onSuccess(Void aVoid) {
+// These are a method which gets executed when the task is succeeded
+ Log.d(TAG, "Data has been added successfully!");
+ }
+ })
+ .addOnFailureListener(new OnFailureListener() {
+ @Override
+ public void onFailure(@NonNull Exception e) {
+// These are a method which gets executed if there’s any problem
+ Log.d(TAG, "Data could not be added!" + e.toString());
+
+ addCityEditText.setText("");
+ addProvinceEditText.setText("");
+ }
+ });
+ }
+
+ }
+ });
+
+ collectionReference.addSnapshotListener(new EventListener() {
+ @Override
+ public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable
+ FirebaseFirestoreException error) {
+
+ // Clear the old list
+ cityDataList.clear();
+ for(QueryDocumentSnapshot doc: queryDocumentSnapshots)
+ {
+ Log.d(TAG, String.valueOf(doc.getData().get("Province Name")));
+ String city = doc.getId();
+ String province = (String) doc.getData().get("Province Name");
+ cityDataList.add(new City(city, province)); // Adding the cities and provinces from FireStore
+ }
+ cityAdapter.notifyDataSetChanged(); // Notifying the adapter to render any new data fetched
+ // from the cloud
+ }
+ });
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e7ecd0fe3..878ba59fa 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,12 +6,32 @@
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
-
+
+
+
+
+
+
+
-
-
\ No newline at end of file
diff --git a/app/src/test/java/TestListyCity.java b/app/src/test/java/TestListyCity.java
new file mode 100644
index 000000000..b0710c883
--- /dev/null
+++ b/app/src/test/java/TestListyCity.java
@@ -0,0 +1,26 @@
+import com.example.simpleparadox.listycity.City;
+import com.example.simpleparadox.listycity.CustomList;
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+
+public class TestListyCity {
+
+ private CustomList list;
+
+ @Before
+ public void createList() {
+ list = new CustomList(null, new ArrayList());
+ }
+
+ @Test
+ public void addCityTest() {
+ int listSize = list.getCount();
+ list.addCity(new City("Halifax", "NS"));
+ assertEquals(list.getCount(), listSize+1);
+ }
+
+}
diff --git a/build.gradle b/build.gradle
index 5509623ab..31c6146ed 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,8 +7,8 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.0'
-
+ classpath 'com.android.tools.build:gradle:7.0.2'
+ classpath 'com.google.gms:google-services:4.3.10'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 36854e580..39b076627 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip