Advertisement
gimmeitorilltell

WeatherTile.java

Mar 15th, 2017
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.97 KB | None | 0 0
  1. /*
  2. * Copyright (C) 2014 The Android Open Source Project
  3. * Copyright (C) 2017 The OmniROM project
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17.  
  18. package com.android.systemui.qs.tiles;
  19.  
  20. import android.content.Context;
  21. import android.content.Intent;
  22. import android.content.res.Resources;
  23. import android.graphics.Bitmap;
  24. import android.graphics.Canvas;
  25. import android.graphics.Paint;
  26. import android.graphics.PaintFlagsDrawFilter;
  27. import android.graphics.drawable.BitmapDrawable;
  28. import android.graphics.drawable.Drawable;
  29. import android.provider.Settings;
  30. import android.util.Log;
  31. import android.view.LayoutInflater;
  32. import android.view.View;
  33. import android.view.ViewGroup;
  34. import android.widget.AdapterView;
  35. import android.widget.ArrayAdapter;
  36. import android.widget.ListView;
  37. import android.widget.Toast;
  38.  
  39. import com.android.internal.logging.MetricsLogger;
  40. import com.android.internal.logging.MetricsProto.MetricsEvent;
  41. import com.android.systemui.R;
  42. import com.android.systemui.omni.DetailedWeatherView;
  43. import com.android.systemui.omni.OmniJawsClient;
  44. import com.android.systemui.qs.QSDetailItems;
  45. import com.android.systemui.qs.QSDetailItems.Item;
  46. import com.android.systemui.qs.QSDetailItemsList;
  47. import com.android.systemui.qs.QSTile;
  48. import com.android.systemui.qs.QSTile.DetailAdapter;
  49.  
  50. import java.util.ArrayList;
  51. import java.util.Arrays;
  52.  
  53. public class WeatherTile extends QSTile<QSTile.BooleanState> implements OmniJawsClient.OmniJawsObserver {
  54. private static final String TAG = "WeatherTile";
  55. private static final boolean DEBUG = false;
  56. private OmniJawsClient mWeatherClient;
  57. private boolean mShowingDetail;
  58. private Drawable mWeatherImage;
  59. private String mWeatherLabel;
  60. private DetailedWeatherView mDetailedView;
  61. private OmniJawsClient.WeatherInfo mWeatherData;
  62. private boolean mEnabled;
  63.  
  64. public WeatherTile(Host host) {
  65. super(host);
  66. mWeatherClient = new OmniJawsClient(mContext);
  67. mEnabled = mWeatherClient.isOmniJawsEnabled();
  68. mWeatherImage = mContext.getResources().getDrawable(R.drawable.ic_qs_weather_default_off);
  69. mWeatherLabel = mContext.getResources().getString(R.string.omnijaws_label_default);
  70. }
  71.  
  72. @Override
  73. public int getMetricsCategory() {
  74. return MetricsEvent.CANDYCANE;
  75. }
  76.  
  77. @Override
  78. public DetailAdapter getDetailAdapter() {
  79. return new WeatherDetailAdapter();
  80. }
  81.  
  82. @Override
  83. public BooleanState newTileState() {
  84. return new BooleanState();
  85. }
  86.  
  87. @Override
  88. public void setListening(boolean listening) {
  89. if (DEBUG) Log.d(TAG, "setListening " + listening);
  90. mEnabled = mWeatherClient.isOmniJawsEnabled();
  91.  
  92. if (listening) {
  93. mWeatherClient.addObserver(this);
  94. queryAndUpdateWeather();
  95. } else {
  96. mWeatherClient.removeObserver(this);
  97. }
  98. }
  99.  
  100. @Override
  101. public void weatherUpdated() {
  102. if (DEBUG) Log.d(TAG, "weatherUpdated");
  103. queryAndUpdateWeather();
  104. }
  105.  
  106. @Override
  107. protected void handleDestroy() {
  108. // make sure we dont left one
  109. mWeatherClient.removeObserver(this);
  110. mWeatherClient.cleanupObserver();
  111. super.handleDestroy();
  112. }
  113.  
  114. @Override
  115. protected void handleSecondaryClick() {
  116. // Secondary clicks are on quickbar tiles
  117. // TODO what should it to - open details or just disable/enable
  118. handleClick();
  119. }
  120.  
  121. @Override
  122. protected void handleClick() {
  123. if (!mWeatherClient.isOmniJawsServiceInstalled()) {
  124. Toast.makeText(mContext, R.string.omnijaws_package_not_available, Toast.LENGTH_SHORT).show();
  125. return;
  126. }
  127. mShowingDetail = true;
  128. if (!mState.value) {
  129. // service enablement is delayed so we keep the status
  130. // extra and hope service will follow correct :)
  131. mEnabled = true;
  132. mWeatherClient.setOmniJawsEnabled(true);
  133. queryAndUpdateWeather();
  134. }
  135. showDetail(true);
  136. }
  137.  
  138. @Override
  139. public Intent getLongClickIntent() {
  140. return mWeatherClient.getSettingsIntent();
  141. }
  142.  
  143. @Override
  144. protected void handleUpdateState(BooleanState state, Object arg) {
  145. if (DEBUG) Log.d(TAG, "handleUpdateState " + mEnabled);
  146. if (mEnabled) {
  147. state.label = mWeatherLabel;
  148. state.icon = new DrawableIcon(mWeatherImage);
  149. state.value = true;
  150. } else {
  151. state.label = mContext.getResources().getString(R.string.omnijaws_label_default);
  152. state.icon = ResourceIcon.get(R.drawable.ic_qs_weather_default_off);
  153. state.value = false;
  154. }
  155. }
  156.  
  157. @Override
  158. public CharSequence getTileLabel() {
  159. return mContext.getResources().getString(R.string.omnijaws_label_default);
  160. }
  161.  
  162. private void queryAndUpdateWeather() {
  163. try {
  164. if (DEBUG) Log.d(TAG, "queryAndUpdateWeather " + mEnabled);
  165. mWeatherImage = mWeatherClient.getDefaultWeatherConditionImage();
  166. if (mEnabled) {
  167. mWeatherClient.queryWeather();
  168. mWeatherData = mWeatherClient.getWeatherInfo();
  169. if (mWeatherData != null) {
  170. mWeatherImage = mWeatherClient.getWeatherConditionImage(mWeatherData.conditionCode);
  171. mWeatherLabel = mWeatherData.temp + mWeatherData.tempUnits;
  172. } else {
  173. mWeatherLabel = mContext.getResources().getString(R.string.omnijaws_service_unkown);
  174. }
  175. } else {
  176. mWeatherLabel = mContext.getResources().getString(R.string.omnijaws_label_default);
  177. }
  178. } catch(Exception e) {
  179. mWeatherLabel = mContext.getResources().getString(R.string.omnijaws_service_error);
  180. }
  181. refreshState();
  182. if (mDetailedView != null) {
  183. mDetailedView.updateWeatherData(mWeatherData);
  184. }
  185. }
  186.  
  187. private class WeatherDetailAdapter implements DetailAdapter {
  188.  
  189. @Override
  190. public int getMetricsCategory() {
  191. return MetricsEvent.CANDYCANE;
  192. }
  193.  
  194. @Override
  195. public CharSequence getTitle() {
  196. return mContext.getString(R.string.omnijaws_detail_header);
  197. }
  198.  
  199. @Override
  200. public Boolean getToggleState() {
  201. return mEnabled;
  202. }
  203.  
  204. @Override
  205. public void setToggleState(boolean state) {
  206. MetricsLogger.action(mContext, getMetricsCategory());
  207. if (!state) {
  208. mWeatherClient.setOmniJawsEnabled(false);
  209. mEnabled = false;
  210. refreshState();
  211. showDetail(false);
  212. mDetailedView = null;
  213. }
  214. }
  215.  
  216. @Override
  217. public Intent getSettingsIntent() {
  218. return mWeatherClient.getSettingsIntent();
  219. }
  220.  
  221. @Override
  222. public View createDetailView(Context context, View convertView, ViewGroup parent) {
  223. mDetailedView = (DetailedWeatherView) LayoutInflater.from(context).inflate(
  224. R.layout.detailed_weather_view, parent, false);
  225. mDetailedView.setWeatherClient(mWeatherClient);
  226. try {
  227. mDetailedView.updateWeatherData(mWeatherData);
  228. } catch (Exception e){
  229. }
  230. return mDetailedView;
  231. }
  232. }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement