OSDN Git Service

Add Weather Content Provider [5/5]
[android-x86/frameworks-base.git] / packages / SystemUI / src / com / android / systemui / statusbar / phone / StatusBarHeaderView.java
index 7f51aa9..5ca3655 100644 (file)
@@ -19,23 +19,18 @@ package com.android.systemui.statusbar.phone;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.ContentUris;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.database.ContentObserver;
 import android.graphics.Outline;
 import android.graphics.Rect;
 import android.graphics.drawable.Animatable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.RippleDrawable;
 import android.net.Uri;
-import android.os.Handler;
 import android.provider.AlarmClock;
 import android.provider.CalendarContract;
-import android.provider.Settings;
-import android.net.Uri;
 import android.util.AttributeSet;
 import android.util.MathUtils;
 import android.util.TypedValue;
@@ -48,6 +43,7 @@ import android.widget.RelativeLayout;
 import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.Toast;
+
 import com.android.keyguard.KeyguardStatusView;
 import com.android.systemui.BatteryMeterView;
 import com.android.systemui.FontSizeUtils;
@@ -66,12 +62,15 @@ import com.android.systemui.tuner.TunerService;
 
 import java.text.NumberFormat;
 
+import cyanogenmod.providers.CMSettings;
+import cyanogenmod.weather.util.WeatherUtils;
+
 /**
  * The view to manage the header area in the expanded status bar.
  */
 public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnClickListener,
         BatteryController.BatteryStateChangeCallback, NextAlarmController.NextAlarmChangeCallback,
-        EmergencyListener, WeatherController.Callback {
+        EmergencyListener, WeatherController.Callback, TunerService.Tunable {
 
     private boolean mExpanded;
     private boolean mListening;
@@ -142,7 +141,6 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
     private float mCurrentT;
     private boolean mShowingDetail;
     private boolean mDetailTransitioning;
-    private SettingsObserver mSettingsObserver;
     private boolean mShowWeather;
 
     private boolean mAllowExpand = true;
@@ -185,7 +183,6 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
         mWeatherContainer.setOnClickListener(this);
         mWeatherLine1 = (TextView) findViewById(R.id.weather_line_1);
         mWeatherLine2 = (TextView) findViewById(R.id.weather_line_2);
-        mSettingsObserver = new SettingsObserver(new Handler());
         loadDimens();
         updateVisibilities();
         updateClockScale();
@@ -311,6 +308,7 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
         mNextAlarmController = nextAlarmController;
     }
 
+    @Override
     public void setWeatherController(WeatherController weatherController) {
         mWeatherController = weatherController;
     }
@@ -375,8 +373,7 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
         }
         mEmergencyCallsOnly.setVisibility(mExpanded && mShowEmergencyCallsOnly ? VISIBLE : GONE);
         mBatteryLevel.setVisibility(mExpanded ? View.VISIBLE : View.GONE);
-        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
-                TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
+        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(View.INVISIBLE);
     }
 
     private void updateSignalClusterDetachment() {
@@ -409,7 +406,8 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
 
     private void updateListeners() {
         if (mListening) {
-            mSettingsObserver.observe();
+            TunerService.get(getContext()).addTunable(this,
+                    "cmsystem:" + CMSettings.System.STATUS_BAR_SHOW_WEATHER);
             mBatteryController.addStateChangedCallback(this);
             mNextAlarmController.addStateChangedCallback(this);
             mWeatherController.addCallback(this);
@@ -417,7 +415,7 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
             mBatteryController.removeStateChangedCallback(this);
             mNextAlarmController.removeStateChangedCallback(this);
             mWeatherController.removeCallback(this);
-            mSettingsObserver.unobserve();
+            TunerService.get(getContext()).removeTunable(this);
         }
     }
 
@@ -469,12 +467,12 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
 
     @Override
     public void onWeatherChanged(WeatherController.WeatherInfo info) {
-        if (info.temp == null || info.condition == null) {
+        if (Double.isNaN(info.temp) || info.condition == null) {
             mWeatherLine1.setText(null);
         } else {
             mWeatherLine1.setText(mContext.getString(
                     R.string.status_bar_expanded_header_weather_format,
-                    info.temp,
+                    WeatherUtils.formatTemperature(info.temp, info.tempUnit),
                     info.condition));
         }
         mWeatherLine2.setText(info.city);
@@ -865,7 +863,9 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
             final boolean showingDetail = detail != null;
             transition(mClock, !showingDetail);
             transition(mDateGroup, !showingDetail);
-            transition(mWeatherContainer, !showingDetail);
+            if (mShowWeather) {
+                transition(mWeatherContainer, !showingDetail);
+            }
             if (mAlarmShowing) {
                 transition(mAlarmStatus, !showingDetail);
             }
@@ -918,37 +918,10 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
         }
     };
 
-    class SettingsObserver extends ContentObserver {
-        SettingsObserver(Handler handler) {
-            super(handler);
-        }
-
-        void observe() {
-            ContentResolver resolver = mContext.getContentResolver();
-            resolver.registerContentObserver(Settings.System.getUriFor(
-                    Settings.System.STATUS_BAR_SHOW_WEATHER), false, this);
-            update();
-        }
-
-        void unobserve() {
-            ContentResolver resolver = mContext.getContentResolver();
-            resolver.unregisterContentObserver(this);
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            update();
-        }
-
-        @Override
-        public void onChange(boolean selfChange, Uri uri) {
-            update();
-        }
-
-        public void update() {
-            ContentResolver resolver = mContext.getContentResolver();
-            mShowWeather = Settings.System.getInt(
-                    resolver, Settings.System.STATUS_BAR_SHOW_WEATHER, 1) == 1;
+    @Override
+    public void onTuningChanged(String key, String newValue) {
+        if (key.endsWith(CMSettings.System.STATUS_BAR_SHOW_WEATHER)) {
+            mShowWeather = newValue == null || "1".equals(newValue);
             updateVisibilities();
         }
     }