Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.78 KB | None | 0 0
  1. package com.github.yurinevenchenov1970.theweather.widget;
  2.  
  3. import android.appwidget.AppWidgetManager;
  4. import android.appwidget.AppWidgetProvider;
  5. import android.content.ComponentName;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.SharedPreferences;
  9. import android.net.Uri;
  10. import android.preference.PreferenceManager;
  11. import android.support.annotation.NonNull;
  12. import android.util.Log;
  13. import android.widget.RemoteViews;
  14.  
  15. import com.github.yurinevenchenov1970.theweather.R;
  16. import com.github.yurinevenchenov1970.theweather.adapter.WeatherExtractor;
  17. import com.github.yurinevenchenov1970.theweather.bean.BaseResponse;
  18. import com.github.yurinevenchenov1970.theweather.bean.SimpleWeatherToShow;
  19. import com.github.yurinevenchenov1970.theweather.net.ApiClientWeather;
  20. import com.github.yurinevenchenov1970.theweather.net.WeatherService;
  21.  
  22. import java.util.List;
  23.  
  24. import retrofit2.Call;
  25. import retrofit2.Callback;
  26. import retrofit2.Response;
  27.  
  28. import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE;
  29. import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_IDS;
  30.  
  31. /**
  32.  * @author Yuri Nevenchenov on 11/14/2017.
  33.  */
  34.  
  35. public class WeatherWidgetProvider extends AppWidgetProvider {
  36.  
  37.     private String mCity;
  38.     private boolean isCitySaved;
  39.     private WeatherService mWeatherService;
  40.     private int mForecastLength = 1;
  41.     private BaseResponse mBaseResponse;
  42.     private List<String> mTextWeatherToShowList;
  43.     private List<SimpleWeatherToShow> mSimpleWeatherToShowList;
  44.  
  45.     @Override
  46.     public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) {
  47.         Intent intent = new Intent(context, WeatherWidgetProvider.class);
  48.         intent.setAction(ACTION_APPWIDGET_UPDATE);
  49.         intent.putExtra(EXTRA_APPWIDGET_IDS, appWidgetIds);
  50.         final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
  51.         context.startService(intent);
  52.  
  53.         final AppWidgetManager manager = AppWidgetManager.getInstance(context);
  54.         final ComponentName componentName = new ComponentName(context, WeatherWidgetProvider.class);
  55.         manager.updateAppWidget(componentName, views);
  56.  
  57.         mCity = getCityFromPrefs(context);
  58.         if (isCitySaved) {
  59.             mWeatherService = ApiClientWeather.getClient().create(WeatherService.class);
  60.             Call<BaseResponse> responseCall = mWeatherService.getWeather(mCity);
  61.             responseCall.enqueue(new Callback<BaseResponse>() {
  62.                 @Override
  63.                 public void onResponse(@NonNull Call<BaseResponse> call, @NonNull Response<BaseResponse> response) {
  64.                     if (response.body() != null) {
  65.                         mBaseResponse = response.body();
  66.                         Log.d(WeatherWidgetProvider.class.getCanonicalName(), "onresponse");
  67.                         mTextWeatherToShowList = WeatherExtractor.extractTextWeatherToShow(mBaseResponse, mForecastLength);
  68.                         mSimpleWeatherToShowList = WeatherExtractor.extractSimpleWeatherToShow(mBaseResponse, mForecastLength);
  69.                         fillWidgetsWithData(context, appWidgetManager, appWidgetIds);
  70.                     }
  71.                 }
  72.  
  73.                 @Override
  74.                 public void onFailure(@NonNull Call<BaseResponse> call, @NonNull Throwable t) {
  75.                     System.out.println("failure " + t.getMessage());
  76.                     Log.d(WeatherWidgetProvider.class.getCanonicalName(), "onfailure");
  77.                 }
  78.             });
  79.  
  80.         } else {
  81.             fillWidgetsWithChoseCityMessage(context, appWidgetManager, appWidgetIds);
  82.         }
  83.         super.onUpdate(context, appWidgetManager, appWidgetIds);
  84.     }
  85.  
  86.     private String getCityFromPrefs(Context context) {
  87.         SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
  88.         String defaultValue = context.getString(R.string.saved_city_name);
  89.         String city = sharedPref.getString(context.getString(R.string.saved_city_name), defaultValue);
  90.         verifyCity(city, defaultValue);
  91.         return city;
  92.     }
  93.  
  94.     private void verifyCity(String city, String defaultValue) {
  95.         if (city.equals(defaultValue)) {
  96.             isCitySaved = false;
  97.         } else {
  98.             isCitySaved = true;
  99.         }
  100.     }
  101.  
  102.     private void fillWidgetsWithData(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  103.         for (int id : appWidgetIds) {
  104.             RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
  105.             views.setTextViewText(R.id.date_text_view, mSimpleWeatherToShowList.get(0).getDataString());
  106.             views.setImageViewUri(R.id.weather_icon_image_view, Uri.parse(mSimpleWeatherToShowList.get(0).getIconPath()));
  107.             views.setTextViewText(R.id.temperature_text_view, mSimpleWeatherToShowList.get(0).getTemperatureString());
  108.             views.setTextViewText(R.id.textforecast_text_view, mTextWeatherToShowList.get(0));
  109.             appWidgetManager.updateAppWidget(id, views);
  110.         }
  111.     }
  112.  
  113.     private void fillWidgetsWithChoseCityMessage(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  114.         for (int id : appWidgetIds) {
  115.             RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
  116.             views.setTextViewText(R.id.date_text_view, "today");
  117.             views.setImageViewResource(R.id.weather_icon_image_view, R.drawable.ic_mood_bad_black_24dp);
  118.             views.setTextViewText(R.id.temperature_text_view, "temperature");
  119.             views.setTextViewText(R.id.textforecast_text_view, "Input City in main app");
  120.             appWidgetManager.updateAppWidget(id, views);
  121.         }
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement