From c7e46108de55f1797e96d33cf0b805c380051d13 Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Wed, 28 Sep 2022 20:04:04 +0200 Subject: Initial commit, screen 1 --- .../java/com/jopek/kanakaeiwa/FirstFragment.java | 143 +++++++++++++++++++++ .../java/com/jopek/kanakaeiwa/MainActivity.java | 65 ++++++++++ .../main/java/com/jopek/kanakaeiwa/Requests.java | 81 ++++++++++++ .../java/com/jopek/kanakaeiwa/SecondFragment.java | 39 ++++++ 4 files changed, 328 insertions(+) create mode 100644 app/src/main/java/com/jopek/kanakaeiwa/FirstFragment.java create mode 100644 app/src/main/java/com/jopek/kanakaeiwa/MainActivity.java create mode 100644 app/src/main/java/com/jopek/kanakaeiwa/Requests.java create mode 100644 app/src/main/java/com/jopek/kanakaeiwa/SecondFragment.java (limited to 'app/src/main/java/com') diff --git a/app/src/main/java/com/jopek/kanakaeiwa/FirstFragment.java b/app/src/main/java/com/jopek/kanakaeiwa/FirstFragment.java new file mode 100644 index 0000000..bef3a9a --- /dev/null +++ b/app/src/main/java/com/jopek/kanakaeiwa/FirstFragment.java @@ -0,0 +1,143 @@ +package com.jopek.kanakaeiwa; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; + +import com.jopek.kanakaeiwa.databinding.FragmentFirstBinding; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class FirstFragment extends Fragment { + + private FragmentFirstBinding binding; + private boolean locationSet = false; + private double lon; + private double lat; + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState + ) { + + binding = FragmentFirstBinding.inflate(inflater, container, false); + return binding.getRoot(); + + } + + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + if (requireActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + getLocation(); + } else { + ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); + } + + + binding.buttonFirst.setOnClickListener(view1 -> { + NavHostFragment.findNavController(FirstFragment.this) + .navigate(R.id.action_FirstFragment_to_SecondFragment); + getLocation(); + }); + } + + public void getWeather() { + Requests requests = new Requests(); + String url = "https://api.openweathermap.org/data/2.5/weather?appid=d7eea7960e9b5024b8441fb6f9344ce4&units=metric&lat=" + lat + "&lon=" + lon; + Log.d(MainActivity.TAG, "getWeather: " + url); + requests.get(url, res -> { + Log.d(MainActivity.TAG, "getWeather: " + res); + try { + JSONObject data = new JSONObject(res); + JSONObject weather = data.getJSONArray("weather").getJSONObject(0); + JSONObject main = data.getJSONObject("main"); + JSONObject wind = data.getJSONObject("wind"); + JSONObject sys = data.getJSONObject("sys"); + requests.setRemoteSrc(binding.weatherImg, "https://openweathermap.org/img/w/" + weather.getString("icon") + ".png"); + binding.cityName.setText(data.getString("name") + ", " + sys.getString("country")); + binding.temp.setText(main.getString("temp")); + binding.weatherText.setText(weather.getString("description")); + binding.humidity.setText(main.getString("humidity") + " %"); + binding.maxTemp.setText(main.getString("temp_max") + " °C"); + binding.minTemp.setText(main.getString("temp_min") + " °C"); + binding.pressure.setText(main.getString("pressure") + " hPa"); + binding.windSpeed.setText(wind.getString("speed") + " m/s"); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + + @SuppressLint("MissingPermission") + public void getLocation() { + LocationManager locationManager = (LocationManager) requireActivity().getSystemService(Context.LOCATION_SERVICE); + LocationListener locationListener = new LocationListener() { + @Override + public void onLocationChanged(@NonNull Location location) { + System.out.println("DEBUG 1"); + lon = location.getLongitude(); + lat = location.getLatitude(); + locationSet = true; + getWeather(); + } + + @Override + public void onProviderEnabled(@NonNull String provider) { + System.out.println("DEBUG 2"); + } + + @Override + public void onProviderDisabled(@NonNull String provider) { + System.out.println("DEBUG 3"); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + System.out.println("DEBUG 4"); + } + }; + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 50, locationListener); + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, + int[] grantResults) { + switch (requestCode) { + case 1: + if (grantResults.length > 0 && + grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(MainActivity.TAG, "onRequestPermissionsResult: success"); + getLocation(); + } + Log.d(MainActivity.TAG, "onRequestPermissionsResult: fail"); + return; + } + // Other 'case' lines to check for other + // permissions this app might request. + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/jopek/kanakaeiwa/MainActivity.java b/app/src/main/java/com/jopek/kanakaeiwa/MainActivity.java new file mode 100644 index 0000000..4b0193b --- /dev/null +++ b/app/src/main/java/com/jopek/kanakaeiwa/MainActivity.java @@ -0,0 +1,65 @@ +package com.jopek.kanakaeiwa; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; + +import com.google.android.material.snackbar.Snackbar; +import com.jopek.kanakaeiwa.databinding.ActivityMainBinding; + +public class MainActivity extends AppCompatActivity { + + public static final String TAG = "maks"; + + private AppBarConfiguration appBarConfiguration; + private ActivityMainBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + setSupportActionBar(binding.toolbar); + + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); + appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); + NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + @Override + public boolean onSupportNavigateUp() { + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); + return NavigationUI.navigateUp(navController, appBarConfiguration) + || super.onSupportNavigateUp(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jopek/kanakaeiwa/Requests.java b/app/src/main/java/com/jopek/kanakaeiwa/Requests.java new file mode 100644 index 0000000..506182b --- /dev/null +++ b/app/src/main/java/com/jopek/kanakaeiwa/Requests.java @@ -0,0 +1,81 @@ +package com.jopek.kanakaeiwa; + + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.util.Log; +import android.widget.ImageView; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.function.Consumer; + +class RequestImage extends AsyncTask { + ImageView bmImage; + public void setRemoteSrc(ImageView bmImage, String url) { + this.bmImage = bmImage; + this.execute(url); + } + + protected Bitmap doInBackground(String... urls) { + String urldisplay = urls[0]; + Bitmap bmp = null; + try { + InputStream in = new java.net.URL(urldisplay).openStream(); + bmp = BitmapFactory.decodeStream(in); + } catch (Exception e) { + Log.e("Error", e.getMessage()); + e.printStackTrace(); + } + return bmp; + } + protected void onPostExecute(Bitmap result) { + bmImage.setImageBitmap(result); + } +} +public class Requests extends AsyncTask { + Consumer cb; + + RequestImage requestImage = new RequestImage(); + + public void get(String url, Consumer cb) { + this.cb = cb; + this.execute(url); + } + public void setRemoteSrc(ImageView bmImage, String url) { + requestImage.setRemoteSrc(bmImage, url); + } + protected String doInBackground(String... urls) { + try { + URL url = new URL(urls[0]); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setDoOutput(true); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.connect(); + BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String content = "", line; + while ((line = rd.readLine()) != null) { + content += line + "\n"; + } + return content; + } catch (IOException exception) { + return "ERROR"; + } + } + + protected void onProgressUpdate(Integer... progress) { + } + + protected void onPostExecute(String result) { + // this is executed on the main thread after the process is over + // update your UI here + cb.accept(result); + } +} diff --git a/app/src/main/java/com/jopek/kanakaeiwa/SecondFragment.java b/app/src/main/java/com/jopek/kanakaeiwa/SecondFragment.java new file mode 100644 index 0000000..7164eec --- /dev/null +++ b/app/src/main/java/com/jopek/kanakaeiwa/SecondFragment.java @@ -0,0 +1,39 @@ +package com.jopek.kanakaeiwa; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; + +import com.jopek.kanakaeiwa.databinding.FragmentSecondBinding; + +public class SecondFragment extends Fragment { + + private FragmentSecondBinding binding; + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState + ) { + + binding = FragmentSecondBinding.inflate(inflater, container, false); + return binding.getRoot(); + + } + + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } + +} \ No newline at end of file -- cgit v1.3.1