Updated code
This commit is contained in:
parent
3c0c9ba2e6
commit
8598bd837e
@ -14,8 +14,8 @@ import com.example.airquality.databinding.ActivityDetailsBinding;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.types.FormattedTemperature;
|
||||
import com.example.airquality.types.Weather3h;
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.ToolbarCompatActivity;
|
||||
import com.example.airquality.utils.helpers.PreferencesManager;
|
||||
import com.example.airquality.utils.base.ToolbarCompatActivity;
|
||||
|
||||
public class DetailsActivity extends ToolbarCompatActivity {
|
||||
|
||||
@ -23,45 +23,64 @@ public class DetailsActivity extends ToolbarCompatActivity {
|
||||
private Weather3h weather3h;
|
||||
private City city;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
binding = ActivityDetailsBinding.inflate(getLayoutInflater());
|
||||
View view = binding.getRoot();
|
||||
setContentView(view);
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
Intent intent = getIntent();
|
||||
weather3h = (Weather3h) intent.getSerializableExtra("WEATHER_3H");
|
||||
city = (City) intent.getSerializableExtra("CITY");
|
||||
|
||||
initToolbar();
|
||||
setToolbarTitle(weather3h.getDateTime());
|
||||
updateData();
|
||||
loadIntentData();
|
||||
setupToolbar();
|
||||
displayWeatherData();
|
||||
}
|
||||
|
||||
protected void updateData() {
|
||||
FormattedTemperature formattedTemperature = weather3h.formattedTemp(this);
|
||||
private void loadIntentData() {
|
||||
Intent intent = getIntent();
|
||||
|
||||
if(checkInternet())
|
||||
{
|
||||
if (intent != null) {
|
||||
weather3h = (Weather3h) intent.getSerializableExtra("WEATHER_3H");
|
||||
city = (City) intent.getSerializableExtra("CITY");
|
||||
}
|
||||
|
||||
if (weather3h == null || city == null) {
|
||||
Toast.makeText(this, "Missing weather or city data", Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private void setupToolbar() {
|
||||
initToolbar();
|
||||
if (weather3h != null) {
|
||||
setToolbarTitle(weather3h.getDateTime());
|
||||
}
|
||||
}
|
||||
|
||||
private void displayWeatherData() {
|
||||
if (weather3h == null || city == null) return;
|
||||
|
||||
final FormattedTemperature temp = weather3h.formattedTemp(this);
|
||||
|
||||
loadWeatherIcon();
|
||||
bindWeatherDetails(temp);
|
||||
}
|
||||
|
||||
private void loadWeatherIcon() {
|
||||
if (hasNetworkConnection()) {
|
||||
Glide.with(this)
|
||||
.load(weather3h.getIconUrl())
|
||||
.into(binding.icon);
|
||||
|
||||
binding.iconCode.setText("");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
binding.icon.setImageDrawable(null);
|
||||
binding.iconCode.setText(weather3h.getIconCode());
|
||||
}
|
||||
}
|
||||
|
||||
private void bindWeatherDetails(FormattedTemperature temp) {
|
||||
binding.cityText.setText(city.toString());
|
||||
binding.datetimeText.setText(weather3h.getDateTime());
|
||||
binding.tempWeatherText.setText(formattedTemperature.tempText + " | " + weather3h.getDescription());
|
||||
binding.tempText.setText(formattedTemperature.tempMinText + " ~ " + formattedTemperature.tempMaxText);
|
||||
binding.tempWeatherText.setText(temp.tempText + " | " + weather3h.getDescription());
|
||||
binding.tempText.setText(temp.tempMinText + " ~ " + temp.tempMaxText);
|
||||
binding.pressureText.setText(weather3h.getPressure() + " hPa");
|
||||
binding.humidityText.setText(weather3h.getHumidity() + "%");
|
||||
binding.windSpeedText.setText(weather3h.getWindSpeed() + " m/s");
|
||||
@ -69,41 +88,34 @@ public class DetailsActivity extends ToolbarCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onRefreshOptionToolbar() {
|
||||
if(!checkInternet()) {
|
||||
Toast.makeText(this, "You can't load data from internet on offline mode", Toast.LENGTH_SHORT).show();
|
||||
if (!hasNetworkConnection()) {
|
||||
Toast.makeText(this, "Offline mode: can't update data", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
String units = PreferencesManager.getUnits(this);
|
||||
RequestQueue queue = Volley.newRequestQueue(this);
|
||||
final String units = PreferencesManager.getUnits(this);
|
||||
final RequestQueue queue = Volley.newRequestQueue(this);
|
||||
|
||||
ForecastAPIRequest forecastAPI = new ForecastAPIRequest(this, city, units) {
|
||||
ForecastAPIRequest forecastRequest = new ForecastAPIRequest(this, city, units) {
|
||||
@Override
|
||||
public void onSuccess(Weather3h[] weatherList) {
|
||||
boolean isFound = false;
|
||||
for (Weather3h w : weatherList) {
|
||||
if (w.getDateTime().equals(weather3h.getDateTime())) {
|
||||
// Update to new data
|
||||
weather3h = w;
|
||||
isFound = true;
|
||||
break;
|
||||
for (Weather3h item : weatherList) {
|
||||
if (item.getDateTime().equals(weather3h.getDateTime())) {
|
||||
weather3h = item;
|
||||
Toast.makeText(DetailsActivity.this, "Weather updated", Toast.LENGTH_SHORT).show();
|
||||
displayWeatherData();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(isFound) {
|
||||
Toast.makeText(DetailsActivity.this, "Data was updated!", Toast.LENGTH_SHORT).show();
|
||||
updateData();
|
||||
}
|
||||
else {
|
||||
Toast.makeText(DetailsActivity.this, "This time is deprecated", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
Toast.makeText(DetailsActivity.this, "This time is no longer available", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(VolleyError error) {
|
||||
Toast.makeText(DetailsActivity.this, "Failed to load weather data", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(DetailsActivity.this, "Error loading weather data", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
};
|
||||
|
||||
queue.add(forecastAPI.getRequest());
|
||||
queue.add(forecastRequest.getRequest());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,26 +6,25 @@ import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.example.airquality.databinding.ActivityFavoritesBinding;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.utils.BaseCompatActivity;
|
||||
import com.example.airquality.utils.CityAdapter;
|
||||
import com.example.airquality.utils.DatabaseHelper;
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.Weather3hAdapter;
|
||||
import com.example.airquality.utils.base.BaseCompatActivity;
|
||||
import com.example.airquality.utils.hooks.CityAdapter;
|
||||
import com.example.airquality.utils.helpers.DatabaseManager;
|
||||
import com.example.airquality.utils.helpers.PreferencesManager;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class FavoritesActivity extends BaseCompatActivity {
|
||||
|
||||
private ActivityFavoritesBinding binding;
|
||||
private CityAdapter cityAdapter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -33,65 +32,63 @@ public class FavoritesActivity extends BaseCompatActivity {
|
||||
EdgeToEdge.enable(this);
|
||||
|
||||
binding = ActivityFavoritesBinding.inflate(getLayoutInflater());
|
||||
View view = binding.getRoot();
|
||||
setContentView(view);
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
setupRecyclerView();
|
||||
setListeners();
|
||||
}
|
||||
|
||||
private void setupRecyclerView() {
|
||||
binding.cityFavoriteList.setLayoutManager(new LinearLayoutManager(this));
|
||||
}
|
||||
public void onSearchActivityBtn(View view) {
|
||||
Intent intent = new Intent(this, SearchCityActivity.class);
|
||||
startActivity(intent);
|
||||
|
||||
private void setListeners() {
|
||||
binding.newCityBtn.setOnClickListener(v -> openSearchActivity());
|
||||
}
|
||||
|
||||
private void openSearchActivity() {
|
||||
startActivity(new Intent(this, SearchCityActivity.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
loadFavoriteList();
|
||||
}
|
||||
private City[] getFavoriteList()
|
||||
{
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(this);
|
||||
List<City> cityList = dbHelper.getAllCities();
|
||||
return cityList.toArray(new City[0]);
|
||||
|
||||
// City[] cities = new City[] {
|
||||
// new City("Belgrade", "RS", 44.7866, 20.4489, "2025-07-04 12:30"),
|
||||
// new City("Novi Sad", "RS", 45.2671, 19.8335, "2025-07-03 09:15"),
|
||||
// new City("Niš", "RS", 43.3209, 21.8958, "2025-07-02 18:45"),
|
||||
// new City("Subotica", "RS", 46.1000, 19.6667, "2025-07-01 14:10"),
|
||||
// new City("Kragujevac", "RS", 44.0128, 20.9110, "2025-06-30 07:50")
|
||||
// };
|
||||
//
|
||||
// return cities;
|
||||
refreshFavoritesList();
|
||||
}
|
||||
|
||||
private void setEnteredDateTime(City city) {
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(this);
|
||||
private void refreshFavoritesList() {
|
||||
List<City> cities = getStoredCities();
|
||||
|
||||
// Get current timestamp, e.g. "2025-07-05 16:45"
|
||||
String currentTimestamp = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault()).format(new java.util.Date());
|
||||
|
||||
boolean success = dbHelper.updateCityLastEnteredAt(city.name, city.country, currentTimestamp);
|
||||
|
||||
Toast.makeText(
|
||||
this,
|
||||
success ? "Updated last entered time for " + city.name : "Failed to update last entered time for " + city.name,
|
||||
Toast.LENGTH_SHORT
|
||||
).show();
|
||||
|
||||
}
|
||||
|
||||
private void loadFavoriteList() {
|
||||
List<City> cities = Arrays.asList(getFavoriteList());
|
||||
|
||||
CityAdapter adapter = new CityAdapter(this, cities) {
|
||||
cityAdapter = new CityAdapter(this, cities) {
|
||||
@Override
|
||||
public void onSelectCity(City city) {
|
||||
if (!hasNetworkConnection()) {
|
||||
Toast.makeText(FavoritesActivity.this, "Offline mode. Please connect to the Internet.", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
PreferencesManager.setCity(FavoritesActivity.this, city);
|
||||
setEnteredDateTime(city);
|
||||
updateLastAccessTime(city);
|
||||
finish();
|
||||
}
|
||||
};
|
||||
binding.cityFavoriteList.setAdapter(adapter);
|
||||
|
||||
binding.cityFavoriteList.setAdapter(cityAdapter);
|
||||
}
|
||||
}
|
||||
|
||||
private List<City> getStoredCities() {
|
||||
DatabaseManager db = new DatabaseManager(this);
|
||||
return db.getAllCities();
|
||||
}
|
||||
|
||||
private void updateLastAccessTime(City city) {
|
||||
String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()).format(new Date());
|
||||
|
||||
DatabaseManager db = new DatabaseManager(this);
|
||||
boolean updated = db.updateCityLastEnteredAt(city.name, city.country, timestamp);
|
||||
|
||||
if (!updated) {
|
||||
Toast.makeText(this, "Could not update visit time for " + city.name, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,10 +14,10 @@ import com.android.volley.toolbox.Volley;
|
||||
import com.example.airquality.api.ForecastAPIRequest;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.types.Weather3h;
|
||||
import com.example.airquality.utils.DatabaseHelper;
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.ToolbarCompatActivity;
|
||||
import com.example.airquality.utils.Weather3hAdapter;
|
||||
import com.example.airquality.utils.helpers.DatabaseManager;
|
||||
import com.example.airquality.utils.helpers.PreferencesManager;
|
||||
import com.example.airquality.utils.base.ToolbarCompatActivity;
|
||||
import com.example.airquality.utils.hooks.Weather3hAdapter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@ -46,7 +46,7 @@ public class MainActivity extends ToolbarCompatActivity {
|
||||
}
|
||||
|
||||
private void saveOffline(Weather3h[] weathers) {
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(this); // Make sure you have context here
|
||||
DatabaseManager dbHelper = new DatabaseManager(this);
|
||||
|
||||
dbHelper.deleteAllWeather();
|
||||
|
||||
@ -60,17 +60,15 @@ public class MainActivity extends ToolbarCompatActivity {
|
||||
Toast.makeText(this, "Weather data saved successfully!", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
private Weather3h[] loadOffline() {
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(this);
|
||||
DatabaseManager dbHelper = new DatabaseManager(this);
|
||||
List<Weather3h> weatherList = dbHelper.getAllWeather();
|
||||
|
||||
Toast.makeText(this, "Loaded " + weatherList.size() + " weather entries", Toast.LENGTH_SHORT).show();
|
||||
|
||||
return weatherList.toArray(new Weather3h[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRefreshOptionToolbar() {
|
||||
if(!checkInternet()) {
|
||||
if(!hasNetworkConnection()) {
|
||||
Toast.makeText(MainActivity.this, "You can't load data from internet on offline mode", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
@ -93,8 +91,7 @@ public class MainActivity extends ToolbarCompatActivity {
|
||||
|
||||
setToolbarTitle(city.toString());
|
||||
|
||||
// If no internet
|
||||
if(!checkInternet()) {
|
||||
if(!hasNetworkConnection()) {
|
||||
displayRecycler(loadOffline(), city, days);
|
||||
Toast.makeText(MainActivity.this, "You are on offline mode", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
|
||||
@ -5,10 +5,6 @@ import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.android.volley.RequestQueue;
|
||||
@ -17,17 +13,16 @@ import com.android.volley.toolbox.Volley;
|
||||
import com.example.airquality.api.CityAPIRequest;
|
||||
import com.example.airquality.databinding.ActivitySearchCityBinding;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.utils.BaseCompatActivity;
|
||||
import com.example.airquality.utils.CityAdapter;
|
||||
import com.example.airquality.utils.DatabaseHelper;
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.Weather3hAdapter;
|
||||
import com.example.airquality.utils.base.BaseCompatActivity;
|
||||
import com.example.airquality.utils.hooks.CityAdapter;
|
||||
import com.example.airquality.utils.helpers.DatabaseManager;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class SearchCityActivity extends BaseCompatActivity {
|
||||
|
||||
private ActivitySearchCityBinding binding;
|
||||
private CityAdapter cityAdapter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -37,49 +32,69 @@ public class SearchCityActivity extends BaseCompatActivity {
|
||||
binding = ActivitySearchCityBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
setupRecyclerView();
|
||||
setListeners();
|
||||
}
|
||||
|
||||
private void setupRecyclerView() {
|
||||
binding.citySearchResult.setLayoutManager(new LinearLayoutManager(this));
|
||||
}
|
||||
|
||||
public void onSearchBtn(View view) {
|
||||
loadCities();
|
||||
private void setListeners() {
|
||||
binding.searchBtn.setOnClickListener(v -> searchCities());
|
||||
}
|
||||
|
||||
private void addToFavorite(City city) {
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(this);
|
||||
boolean success = dbHelper.addOneCity(city);
|
||||
Toast.makeText(this, success ? "City added to favorites!" : "Failed to add city.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
private void searchCities() {
|
||||
final String query = binding.searchEditText.getText().toString().trim();
|
||||
|
||||
private void loadCities() {
|
||||
String searchQuery = binding.searchEditText.getText().toString();
|
||||
|
||||
// If no internet
|
||||
if(!checkInternet()) {
|
||||
Toast.makeText(this, "You are on offline mode", Toast.LENGTH_SHORT).show();
|
||||
if (query.isEmpty()) {
|
||||
Toast.makeText(this, "Please enter a city name", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
RequestQueue queue = Volley.newRequestQueue(this);
|
||||
|
||||
CityAPIRequest cityAPIRequest = new CityAPIRequest(this, searchQuery) {
|
||||
if (!hasNetworkConnection()) {
|
||||
Toast.makeText(this, "You are in offline mode. Online search is unavailable.", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
fetchCitiesFromApi(query);
|
||||
}
|
||||
|
||||
private void fetchCitiesFromApi(String query) {
|
||||
final RequestQueue queue = Volley.newRequestQueue(this);
|
||||
|
||||
CityAPIRequest request = new CityAPIRequest(this, query) {
|
||||
@Override
|
||||
public void onSuccess(City[] objectList) {
|
||||
CityAdapter adapter = new CityAdapter(SearchCityActivity.this, Arrays.asList(objectList), "Add") {
|
||||
@Override
|
||||
public void onSelectCity(City city) {
|
||||
addToFavorite(city);
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
binding.citySearchResult.setAdapter(adapter);
|
||||
public void onSuccess(City[] cities) {
|
||||
displaySearchResults(cities);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(VolleyError error) {
|
||||
Toast.makeText(SearchCityActivity.this, "Failed to load weather data", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(SearchCityActivity.this, "Failed to load city data", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
};
|
||||
|
||||
queue.add(cityAPIRequest.getRequest());
|
||||
queue.add(request.getRequest());
|
||||
}
|
||||
}
|
||||
|
||||
private void displaySearchResults(City[] cities) {
|
||||
cityAdapter = new CityAdapter(this, Arrays.asList(cities), "Add") {
|
||||
@Override
|
||||
public void onSelectCity(City city) {
|
||||
addCityToFavorites(city);
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
binding.citySearchResult.setAdapter(cityAdapter);
|
||||
}
|
||||
|
||||
private void addCityToFavorites(City city) {
|
||||
DatabaseManager db = new DatabaseManager(this);
|
||||
boolean success = db.addOneCity(city);
|
||||
|
||||
String message = success ? "City added to favorites!" : "Failed to add city.";
|
||||
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,19 +1,16 @@
|
||||
package com.example.airquality;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.utils.BaseCompatActivity;
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.base.BaseCompatActivity;
|
||||
import com.example.airquality.utils.helpers.PreferencesManager;
|
||||
|
||||
public class SettingsActivity extends BaseCompatActivity {
|
||||
Spinner spinnerCity;
|
||||
|
||||
@ -7,13 +7,10 @@ import com.android.volley.Request;
|
||||
import com.android.volley.Response;
|
||||
import com.android.volley.VolleyError;
|
||||
import com.android.volley.toolbox.JsonArrayRequest;
|
||||
import com.android.volley.toolbox.JsonObjectRequest;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.utils.CityParser;
|
||||
import com.example.airquality.utils.Weather3hParser;
|
||||
import com.example.airquality.utils.hooks.CityParser;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class CityAPIRequest extends JsonAPIRequest<City, JsonArrayRequest> {
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@ package com.example.airquality.api;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.volley.Request;
|
||||
import com.android.volley.Response;
|
||||
@ -10,12 +9,10 @@ import com.android.volley.VolleyError;
|
||||
import com.android.volley.toolbox.JsonObjectRequest;
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.types.Weather3h;
|
||||
import com.example.airquality.utils.Weather3hParser;
|
||||
import com.example.airquality.utils.hooks.Weather3hParser;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class ForecastAPIRequest extends JsonAPIRequest<Weather3h, JsonObjectRequest> {
|
||||
|
||||
@SuppressLint("DefaultLocale")
|
||||
|
||||
@ -1,19 +1,9 @@
|
||||
package com.example.airquality.api;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.volley.Request;
|
||||
import com.android.volley.Response;
|
||||
import com.android.volley.VolleyError;
|
||||
import com.android.volley.toolbox.JsonObjectRequest;
|
||||
import com.example.airquality.MainActivity;
|
||||
import com.example.airquality.R;
|
||||
import com.example.airquality.types.Weather3h;
|
||||
import com.example.airquality.utils.Weather3hAdapter;
|
||||
import com.example.airquality.utils.Weather3hParser;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
public abstract class JsonAPIRequest<T, JR> {
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ package com.example.airquality.types;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.example.airquality.utils.PreferencesManager;
|
||||
import com.example.airquality.utils.helpers.PreferencesManager;
|
||||
|
||||
public class FormattedTemperature {
|
||||
public String tempText;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.base;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
@ -8,14 +8,14 @@ import android.view.View;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class BaseCompatActivity extends AppCompatActivity {
|
||||
public boolean checkInternet()
|
||||
public boolean hasNetworkConnection()
|
||||
{
|
||||
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
|
||||
}
|
||||
|
||||
public void onBackButton(View view)
|
||||
public void onBack(View view)
|
||||
{
|
||||
finish();
|
||||
}
|
||||
@ -1,9 +1,8 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.base;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.view.MenuInflater;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
|
||||
import com.example.airquality.R;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.helpers;
|
||||
|
||||
|
||||
import android.content.ContentValues;
|
||||
@ -13,7 +13,7 @@ import com.example.airquality.types.Weather3h;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
public class DatabaseManager extends SQLiteOpenHelper {
|
||||
|
||||
//weather info
|
||||
public static final String DATABASE_NAME = "weather.db";
|
||||
@ -42,7 +42,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
public static final String COLUMN_CITY_LONGITUDE = "longitude";
|
||||
public static final String COLUMN_CITY_LAST_ENTERED = "lastEnteredAt";
|
||||
|
||||
public DatabaseHelper(Context context) {
|
||||
public DatabaseManager(Context context) {
|
||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
}
|
||||
|
||||
@ -86,7 +86,6 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
}
|
||||
|
||||
|
||||
//functions for weather info
|
||||
public boolean addOneWeather(Weather3h weather) {
|
||||
SQLiteDatabase db = this.getWritableDatabase();
|
||||
ContentValues cv = new ContentValues();
|
||||
@ -150,7 +149,6 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
db.close();
|
||||
}
|
||||
|
||||
//functions for favorite cities
|
||||
public boolean addOneCity(City city) {
|
||||
SQLiteDatabase db = this.getWritableDatabase();
|
||||
ContentValues cv = new ContentValues();
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.hooks;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
@ -1,7 +1,6 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.hooks;
|
||||
|
||||
import com.example.airquality.types.City;
|
||||
import com.example.airquality.types.Weather3h;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.hooks;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.example.airquality.utils;
|
||||
package com.example.airquality.utils.hooks;
|
||||
|
||||
import com.example.airquality.types.Weather3h;
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
<Button
|
||||
style="@style/BackButton"
|
||||
android:onClick="onBackButton" />
|
||||
android:onClick="onBack" />
|
||||
|
||||
<TextView
|
||||
style="@style/headerText"
|
||||
@ -35,19 +35,20 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:maxWidth="320dp"
|
||||
android:text="Add new city"
|
||||
android:layout_marginTop="20dp"
|
||||
android:onClick="onSearchActivityBtn"
|
||||
android:layout_marginTop="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/cityFavoriteList" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/cityFavoriteList"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:dividerHeight="1dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/newCityBtn"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginTop="20dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/linearLayout"
|
||||
app:layout_constraintBottom_toTopOf="@id/newCityBtn"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
<Button
|
||||
style="@style/BackButton"
|
||||
android:onClick="onBackButton" />
|
||||
android:onClick="onBack" />
|
||||
|
||||
<TextView
|
||||
style="@style/headerText"
|
||||
@ -53,7 +53,6 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Search"
|
||||
android:onClick="onSearchBtn"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
<Button
|
||||
style="@style/BackButton"
|
||||
android:onClick="onBackButton"
|
||||
android:onClick="onBack"
|
||||
/>
|
||||
<TextView
|
||||
style="@style/headerText"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user