Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.github.yurinevenchenov1970.theweather.widget;
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProvider;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.net.Uri;
- import android.preference.PreferenceManager;
- import android.support.annotation.NonNull;
- import android.util.Log;
- import android.widget.RemoteViews;
- import com.github.yurinevenchenov1970.theweather.R;
- import com.github.yurinevenchenov1970.theweather.adapter.WeatherExtractor;
- import com.github.yurinevenchenov1970.theweather.bean.BaseResponse;
- import com.github.yurinevenchenov1970.theweather.bean.SimpleWeatherToShow;
- import com.github.yurinevenchenov1970.theweather.net.ApiClientWeather;
- import com.github.yurinevenchenov1970.theweather.net.WeatherService;
- import java.util.List;
- import retrofit2.Call;
- import retrofit2.Callback;
- import retrofit2.Response;
- import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE;
- import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_IDS;
- /**
- * @author Yuri Nevenchenov on 11/14/2017.
- */
- public class WeatherWidgetProvider extends AppWidgetProvider {
- private String mCity;
- private boolean isCitySaved;
- private WeatherService mWeatherService;
- private int mForecastLength = 1;
- private BaseResponse mBaseResponse;
- private List<String> mTextWeatherToShowList;
- private List<SimpleWeatherToShow> mSimpleWeatherToShowList;
- @Override
- public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) {
- Intent intent = new Intent(context, WeatherWidgetProvider.class);
- intent.setAction(ACTION_APPWIDGET_UPDATE);
- intent.putExtra(EXTRA_APPWIDGET_IDS, appWidgetIds);
- final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
- context.startService(intent);
- final AppWidgetManager manager = AppWidgetManager.getInstance(context);
- final ComponentName componentName = new ComponentName(context, WeatherWidgetProvider.class);
- manager.updateAppWidget(componentName, views);
- mCity = getCityFromPrefs(context);
- if (isCitySaved) {
- mWeatherService = ApiClientWeather.getClient().create(WeatherService.class);
- Call<BaseResponse> responseCall = mWeatherService.getWeather(mCity);
- responseCall.enqueue(new Callback<BaseResponse>() {
- @Override
- public void onResponse(@NonNull Call<BaseResponse> call, @NonNull Response<BaseResponse> response) {
- if (response.body() != null) {
- mBaseResponse = response.body();
- Log.d(WeatherWidgetProvider.class.getCanonicalName(), "onresponse");
- mTextWeatherToShowList = WeatherExtractor.extractTextWeatherToShow(mBaseResponse, mForecastLength);
- mSimpleWeatherToShowList = WeatherExtractor.extractSimpleWeatherToShow(mBaseResponse, mForecastLength);
- fillWidgetsWithData(context, appWidgetManager, appWidgetIds);
- }
- }
- @Override
- public void onFailure(@NonNull Call<BaseResponse> call, @NonNull Throwable t) {
- System.out.println("failure " + t.getMessage());
- Log.d(WeatherWidgetProvider.class.getCanonicalName(), "onfailure");
- }
- });
- } else {
- fillWidgetsWithChoseCityMessage(context, appWidgetManager, appWidgetIds);
- }
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- }
- private String getCityFromPrefs(Context context) {
- SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
- String defaultValue = context.getString(R.string.saved_city_name);
- String city = sharedPref.getString(context.getString(R.string.saved_city_name), defaultValue);
- verifyCity(city, defaultValue);
- return city;
- }
- private void verifyCity(String city, String defaultValue) {
- if (city.equals(defaultValue)) {
- isCitySaved = false;
- } else {
- isCitySaved = true;
- }
- }
- private void fillWidgetsWithData(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- for (int id : appWidgetIds) {
- RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
- views.setTextViewText(R.id.date_text_view, mSimpleWeatherToShowList.get(0).getDataString());
- views.setImageViewUri(R.id.weather_icon_image_view, Uri.parse(mSimpleWeatherToShowList.get(0).getIconPath()));
- views.setTextViewText(R.id.temperature_text_view, mSimpleWeatherToShowList.get(0).getTemperatureString());
- views.setTextViewText(R.id.textforecast_text_view, mTextWeatherToShowList.get(0));
- appWidgetManager.updateAppWidget(id, views);
- }
- }
- private void fillWidgetsWithChoseCityMessage(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- for (int id : appWidgetIds) {
- RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
- views.setTextViewText(R.id.date_text_view, "today");
- views.setImageViewResource(R.id.weather_icon_image_view, R.drawable.ic_mood_bad_black_24dp);
- views.setTextViewText(R.id.temperature_text_view, "temperature");
- views.setTextViewText(R.id.textforecast_text_view, "Input City in main app");
- appWidgetManager.updateAppWidget(id, views);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement