diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ece4e69..277c4f5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,7 +9,7 @@ android { defaultConfig { applicationId = "com.example.myapp_1" minSdk = 24 - targetSdk = 33 + targetSdk = 34 versionCode = 1 versionName = "1.0" @@ -31,7 +31,7 @@ android { dependencies { implementation("androidx.appcompat:appcompat:1.6.1") - implementation("com.google.android.material:material:1.10.0") + implementation("com.google.android.material:material:1.11.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("com.google.android.gms:play-services-maps:18.2.0") implementation("com.google.code.gson:gson:2.10.1") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 97af3c9..c40a977 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,10 +2,17 @@ + + + + diff --git a/app/src/main/java/com/example/myapp_1/DB/Arrival.java b/app/src/main/java/com/example/myapp_1/DB/Arrival.java new file mode 100644 index 0000000..b6f2d38 --- /dev/null +++ b/app/src/main/java/com/example/myapp_1/DB/Arrival.java @@ -0,0 +1,20 @@ +package com.example.myapp_1.DB; + +public class Arrival +{ + public String getArrivalTime() + { + return arrivalTime; + } + + public void setArrivalTime(String arrivalTime) + { + this.arrivalTime = arrivalTime; + } + + private String arrivalTime; + Arrival(String time) { + this.arrivalTime = time; + + } +} diff --git a/app/src/main/java/com/example/myapp_1/DB/GetArrivals.java b/app/src/main/java/com/example/myapp_1/DB/GetArrivals.java new file mode 100644 index 0000000..0b59237 --- /dev/null +++ b/app/src/main/java/com/example/myapp_1/DB/GetArrivals.java @@ -0,0 +1,17 @@ +package com.example.myapp_1.DB; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.GET; +public interface GetArrivals +{ +//Specify the request type and pass the relative URL// + + @GET("/arrivals/all") + +//Wrap the response in a Call object with the type of the expected result// + + Call> getAllArrivals(); +} + diff --git a/app/src/main/java/com/example/myapp_1/DB/RetrofitClient.java b/app/src/main/java/com/example/myapp_1/DB/RetrofitClient.java new file mode 100644 index 0000000..d938502 --- /dev/null +++ b/app/src/main/java/com/example/myapp_1/DB/RetrofitClient.java @@ -0,0 +1,31 @@ +package com.example.myapp_1.DB; + +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class RetrofitClient { + + private static Retrofit retrofit; + +//Define the base URL// + + private static final String BASE_URL = "https://localhost:8080"; + +//Create the Retrofit instance// + + public static Retrofit getRetrofitInstance() { + if (retrofit == null) { + retrofit = new retrofit2.Retrofit.Builder() + .baseUrl(BASE_URL) + +//Add the converter// + + .addConverterFactory(GsonConverterFactory.create()) + +//Build the Retrofit instance// + + .build(); + } + return retrofit; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapp_1/FetchArrival.java b/app/src/main/java/com/example/myapp_1/FetchArrival.java new file mode 100644 index 0000000..b078b7c --- /dev/null +++ b/app/src/main/java/com/example/myapp_1/FetchArrival.java @@ -0,0 +1,63 @@ +package com.example.myapp_1; + + +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.IBinder; +import android.util.Log; +import android.widget.Toast; + +import com.example.myapp_1.DB.Arrival; +import com.example.myapp_1.DB.GetArrivals; +import com.example.myapp_1.DB.RetrofitClient; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; + +public class FetchArrival extends Service +{ + private static final String TAG = "MyActivity"; + @Override + public int onStartCommand(Intent intent, int flags, int Startid) { + GetArrivals apiService = RetrofitClient.getRetrofitInstance().create(GetArrivals.class); + Call> call = apiService.getAllArrivals(); + //Execute the request asynchronously// + + call.enqueue(new Callback>() { + + + + //Handle a successful response// + @Override + public void onResponse(Call> call, Response> response) { + SharedPreferences sp = getApplicationContext().getSharedPreferences("UserData", MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); +// Log.d(TAG, response.body().toString()); + editor.putString("response", response.body().toString()); + } + //Handle execution failures// + + public void onFailure(Call> call, Throwable throwable) { + System.out.println("A"); + } + }); + + +//Display the retrieved data as a list// + + + + return START_NOT_STICKY; + } + @Override + public IBinder onBind(Intent intent) + { + // TODO: Return the communication channel to the service. + throw new UnsupportedOperationException("Not yet implemented"); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapp_1/HomeActivity.java b/app/src/main/java/com/example/myapp_1/HomeActivity.java index cfe3625..330e95a 100644 --- a/app/src/main/java/com/example/myapp_1/HomeActivity.java +++ b/app/src/main/java/com/example/myapp_1/HomeActivity.java @@ -1,8 +1,11 @@ package com.example.myapp_1; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.MenuItem; +import android.widget.ImageView; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; @@ -20,6 +23,7 @@ public class HomeActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); + ImageView vec_back = findViewById(R.id.homeBackButton); BottomNavigationView bottomNavigationView = findViewById(R.id.homeBottomView); bottomNavigationView.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -42,6 +46,20 @@ public class HomeActivity extends AppCompatActivity { return true; } }); + TextView userGreeting = findViewById(R.id.userGreeting); + SharedPreferences currentUserThings = getApplicationContext().getSharedPreferences("UserData", MODE_PRIVATE); + String user = currentUserThings.getString("username", ""); + if (user != null) + userGreeting.setText("Welcome " + user + "!"); + + String response = currentUserThings.getString("response", ""); + TextView prediction = findViewById(R.id.prediction); + prediction.setText(response); + vec_back.setOnClickListener(view -> { + Intent newScreen = new Intent(getApplicationContext(), LoginActivity.class); + startActivity(newScreen); + }); + } } diff --git a/app/src/main/java/com/example/myapp_1/LoginActivity.java b/app/src/main/java/com/example/myapp_1/LoginActivity.java index 18a3b5b..b90d364 100644 --- a/app/src/main/java/com/example/myapp_1/LoginActivity.java +++ b/app/src/main/java/com/example/myapp_1/LoginActivity.java @@ -1,11 +1,10 @@ package com.example.myapp_1; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; -import android.view.View; import android.widget.Button; import android.widget.EditText; -import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; @@ -13,10 +12,10 @@ import androidx.appcompat.app.AppCompatActivity; import com.example.myapp_1.DB.DBOperations; public class LoginActivity extends AppCompatActivity { + SharedPreferences currentUserThings; EditText username; EditText password; - TextView forgetpassword; Button login; Button signup; @@ -27,64 +26,52 @@ public class LoginActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); - + currentUserThings = getSharedPreferences("UserData", MODE_PRIVATE); username = findViewById(R.id.editTextText); password = findViewById(R.id.editTextTextPassword); -// forgetpassword = findViewById(R.id.forgetpass); - login = findViewById(R.id.button); - signup = findViewById(R.id.button2); - guestLogin= findViewById(R.id.button3); -// forgetpassword.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// Intent newScreen = new Intent(getApplicationContext(), PasswordResetActivity.class); -// startActivity(newScreen); -// } -// }); - signup.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent newScreen = new Intent(getApplicationContext(), SigninActivity.class); - startActivity(newScreen); - } + + login = findViewById(R.id.loginButton); + signup = findViewById(R.id.signupButton); + guestLogin= findViewById(R.id.guestButton); + + SharedPreferences.Editor editor = currentUserThings.edit(); + signup.setOnClickListener(v -> { + Intent newScreen = new Intent(getApplicationContext(), SigninActivity.class); + startActivity(newScreen); }); - guestLogin.setOnClickListener(new View.OnClickListener(){ - - - @Override - public void onClick(View v) { - Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); - startActivity(newScreen); - } + guestLogin.setOnClickListener(v -> { + editor.putString("username", "Guest"); + editor.apply(); + Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); + startActivity(newScreen); }); - login.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + login.setOnClickListener(v -> { - String username_data = username.getText().toString(); - String password_data = password.getText().toString(); + String username_data = username.getText().toString(); + String password_data = password.getText().toString(); - if(username_data.isEmpty() || password_data.isEmpty()){ - Toast.makeText(LoginActivity.this,"Please fill your data!", Toast.LENGTH_LONG).show(); - }else{ - if (dbOperations.checkLoginCredentials(username_data, password_data)) { - // Login successful - // Proceed to the next screen or perform other actions - Toast.makeText(LoginActivity.this,"Welcome", Toast.LENGTH_LONG).show(); - Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); - startActivity(newScreen); + if(username_data.isEmpty() || password_data.isEmpty()){ + Toast.makeText(LoginActivity.this,"Please fill your data!", Toast.LENGTH_LONG).show(); + }else{ + if (dbOperations.checkLoginCredentials(username_data, password_data)) { + // Login successful + // Proceed to the next screen or perform other actions + Toast.makeText(LoginActivity.this,"Welcome", Toast.LENGTH_LONG).show(); + editor.putString("username", username_data); + editor.apply(); + Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); + startActivity(newScreen); - } else { - // Login failed + } else { + // Login failed - Toast.makeText(LoginActivity.this,"Invalid Iformation", Toast.LENGTH_LONG).show(); - - } + Toast.makeText(LoginActivity.this,"Invalid Iformation", Toast.LENGTH_LONG).show(); } } + }); } } diff --git a/app/src/main/java/com/example/myapp_1/NotificationActivity.java b/app/src/main/java/com/example/myapp_1/NotificationActivity.java index 4d54a68..ae53b93 100644 --- a/app/src/main/java/com/example/myapp_1/NotificationActivity.java +++ b/app/src/main/java/com/example/myapp_1/NotificationActivity.java @@ -1,14 +1,21 @@ package com.example.myapp_1; +import android.content.Intent; import android.os.Bundle; +import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; public class NotificationActivity extends AppCompatActivity { - +ImageView vec_back; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_notification); + vec_back = findViewById(R.id.notificationBackButton); + vec_back.setOnClickListener(view -> { + Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); + startActivity(newScreen); + }); } } diff --git a/app/src/main/java/com/example/myapp_1/PasswordResetActivity.java b/app/src/main/java/com/example/myapp_1/PasswordResetActivity.java index 9d8b08a..277e654 100644 --- a/app/src/main/java/com/example/myapp_1/PasswordResetActivity.java +++ b/app/src/main/java/com/example/myapp_1/PasswordResetActivity.java @@ -20,7 +20,7 @@ public class PasswordResetActivity extends AppCompatActivity { setContentView(R.layout.activity_password_reset); email = findViewById(R.id.editTextTextEmailAddress); - reset = findViewById(R.id.button3); + reset = findViewById(R.id.guestButton); reset.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/example/myapp_1/Predict.java b/app/src/main/java/com/example/myapp_1/Predict.java index 3075362..cc4b433 100644 --- a/app/src/main/java/com/example/myapp_1/Predict.java +++ b/app/src/main/java/com/example/myapp_1/Predict.java @@ -33,55 +33,52 @@ public class Predict extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_predict); - vec_back = findViewById(R.id.imageView2); + vec_back = findViewById(R.id.predictBackButton); edi_station = findViewById(R.id.editTextText); edi_weather = findViewById(R.id.editTextText2); btn_pred = findViewById(R.id.button4); prog_bar = findViewById(R.id.progressBar); - txt_station = findViewById(R.id.textView4); + txt_station = findViewById(R.id.prediction); txt_pred_time = findViewById(R.id.predicted_time); - vec_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); - startActivity(newScreen); - } + vec_back = findViewById(R.id.predictBackButton); + vec_back.setOnClickListener(view -> { + Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); + startActivity(newScreen); }); - btn_pred.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String station = edi_station.getText().toString(); - String weather = edi_weather.getText().toString(); + btn_pred.setOnClickListener(view -> { + String station = edi_station.getText().toString(); + String weather = edi_weather.getText().toString(); - if(station.isEmpty() || weather.isEmpty()) { - Toast.makeText(Predict.this, "Please enter something", Toast.LENGTH_SHORT).show(); - }else{ - // we will pass the input features to the model to predict - // then display predictions + if(station.isEmpty() || weather.isEmpty()) { + Toast.makeText(Predict.this, "Please enter something", Toast.LENGTH_SHORT).show(); + }else{ + // we will pass the input features to the model to predict + // then display predictions - txt_station.setText(station); + txt_station.setText(station); - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - for(int i = 0; i < 10; i++){ - prog_bar.incrementProgressBy(10); - SystemClock.sleep(500); - } - prog_bar.setVisibility(View.GONE); - - long currentTimeMillis = System.currentTimeMillis(); - // Create a SimpleDateFormat object to format the time - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // Format the time and set it to the TextView - txt_pred_time.setText(sdf.format(new Date(currentTimeMillis))); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + for(int i = 0; i < 10; i++){ + prog_bar.incrementProgressBy(10); + SystemClock.sleep(500); } - }); - thread.start(); + prog_bar.setVisibility(View.GONE); + + long currentTimeMillis = System.currentTimeMillis(); + // Create a SimpleDateFormat object to format the time + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // Format the time and set it to the TextView + txt_pred_time.setText(sdf.format(new Date(currentTimeMillis))); + } + }); + Intent apiService = new Intent(this, FetchArrival.class); + startService(apiService); + thread.start(); - } } }); } diff --git a/app/src/main/java/com/example/myapp_1/Schedule.java b/app/src/main/java/com/example/myapp_1/Schedule.java index 2bb396d..25dc0fc 100644 --- a/app/src/main/java/com/example/myapp_1/Schedule.java +++ b/app/src/main/java/com/example/myapp_1/Schedule.java @@ -2,13 +2,21 @@ package com.example.myapp_1; import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; import android.os.Bundle; +import android.widget.ImageView; public class Schedule extends AppCompatActivity { + ImageView vec_back; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_schedule); + vec_back = findViewById(R.id.ScheduleBackButton); + vec_back.setOnClickListener(view -> { + Intent newScreen = new Intent(getApplicationContext(), HomeActivity.class); + startActivity(newScreen); + }); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 52cab26..14ce147 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -29,19 +29,15 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + app:srcCompat="@drawable/_vector" />