diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ebb9e00717bf686c8518029fbc8db82e38ab45e4..993cafae1151c8d202b2c5673f55e5845e00995c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,9 @@ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission. ACCESS_COARSE_LOCATION" /> + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission + android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" diff --git a/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java b/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java index d44b09fcfb67a3070b5b609c21361c2497bc686c..8648cab690536e5e2b870c02e87cb2e49b726e84 100644 --- a/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java +++ b/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java @@ -5,6 +5,7 @@ import android.content.Intent; import com.chatman.activity.CompassActivity; import com.chatman.model.Chat; +import com.chatman.service.WeatherService; import java.util.Calendar; @@ -16,6 +17,10 @@ public class BotMessageHelper { Intent intent = new Intent(context, CompassActivity.class); context.startActivity(intent); } + else if (message.equals("weather today")) { + GpsHelper gps = new GpsHelper(context); + new WeatherService(context).execute(gps.getLocation()); + } else sendBotMessage(context, "Halo! Selamat datang di ChatMan"); } diff --git a/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java b/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5cbd5cb7c99b1b0b2aa24ecec36d7b2ec07081f8 --- /dev/null +++ b/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java @@ -0,0 +1,72 @@ +package com.chatman.service; + +import android.location.Location; +import android.net.Uri; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +import javax.net.ssl.HttpsURLConnection; + +public class WeatherNetworkUtils { + private static final String BASE_URL = "https://api.openweathermap.org/data/2.5/weather?"; + private static final String LAT_PARAM = "lat"; + private static final String LONG_PARAM = "lon"; + private static final String APPID = "APPID"; + private static final String UNITS = "units"; + + public static String getWeatherInfo(Location location) { + HttpsURLConnection urlConnection = null; + BufferedReader reader = null; + String resultJSON = null; + + try { + Uri buildURI = Uri.parse(BASE_URL).buildUpon() + .appendQueryParameter(LAT_PARAM, Double.toString(location.getLatitude())) + .appendQueryParameter(LONG_PARAM, Double.toString(location.getLongitude())) + .appendQueryParameter(UNITS, "metric") + .appendQueryParameter(APPID, "2a4ab4c143bb11a626c17f4aef3d5e5a") + .build(); + + URL requestURL = new URL(buildURI.toString()); + + urlConnection = (HttpsURLConnection) requestURL.openConnection(); + urlConnection.setRequestMethod("GET"); + urlConnection.connect(); + + InputStream inputStream = urlConnection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder builder = new StringBuilder(); + + String line = ""; + while((line = reader.readLine()) != null) { + builder.append(line); + builder.append("\n"); + } + + if (builder.length() == 0) { + return null; + } + + resultJSON = builder.toString(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (urlConnection != null) { + urlConnection.disconnect(); + } + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return resultJSON; + } +} diff --git a/android/app/src/main/java/com/chatman/service/WeatherService.java b/android/app/src/main/java/com/chatman/service/WeatherService.java new file mode 100644 index 0000000000000000000000000000000000000000..7b39f0f3491c8307a6e6a3e59414dcc2589870e0 --- /dev/null +++ b/android/app/src/main/java/com/chatman/service/WeatherService.java @@ -0,0 +1,64 @@ +package com.chatman.service; + +import android.content.Context; +import android.location.Location; +import android.os.AsyncTask; + +import com.chatman.helper.BotMessageHelper; + +import org.json.JSONObject; + +import java.util.Calendar; + +public class WeatherService extends AsyncTask<Location, Void, String> { + private Context mContext; + + public WeatherService(Context context) { + this.mContext = context; + } + + @Override + protected String doInBackground(Location... locations) { + return WeatherNetworkUtils.getWeatherInfo(locations[0]); + } + + @Override + protected void onPostExecute(String s) { + super.onPostExecute(s); + try { + StringBuilder messageBuilder = new StringBuilder(); + JSONObject jsonObject = new JSONObject(s); + JSONObject weather = jsonObject.getJSONArray("weather").getJSONObject(0); + JSONObject main_data = jsonObject.getJSONObject("main"); + JSONObject clouds = jsonObject.getJSONObject("clouds"); + JSONObject system = jsonObject.getJSONObject("sys"); + + //Calculate time + Calendar cl = Calendar.getInstance(); + cl.setTimeInMillis(jsonObject.getLong("dt")*1000); + String date = "" + cl.get(Calendar.DAY_OF_MONTH) + "/" + cl.get(Calendar.MONTH + 1) + "/" + cl.get(Calendar.YEAR); + String time = "" + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE) + ":" + cl.get(Calendar.SECOND) + 0; + + messageBuilder.append(weather.getString("description")); + messageBuilder.setCharAt(0, Character.toTitleCase(messageBuilder.charAt(0))); + messageBuilder.append(" in "); + messageBuilder.append(jsonObject.getString("name") + ", "); + messageBuilder.append(system.getString("country")); + messageBuilder.append(" with a temperature of "); + messageBuilder.append(main_data.getString("temp")); + messageBuilder.append(" C, and a chance of raining at "); + messageBuilder.append(clouds.getString("all")); + messageBuilder.append("%\n\n"); + messageBuilder.append("Updated at: "); + messageBuilder.append(date); + messageBuilder.append(" "); + messageBuilder.append(time); + + BotMessageHelper.sendBotMessage(mContext, messageBuilder.toString()); + + } catch (Exception e) { + BotMessageHelper.sendBotMessage(mContext, "Weather data cannot be acquired"); + e.printStackTrace(); + } + } +}