OSDN Git Service

Adding zen mode condition dialog
[android-x86/packages-apps-Settings.git] / src / com / android / settings / notification / ZenModeConditionSelection.java
index 031d785..856a7f6 100644 (file)
@@ -19,13 +19,13 @@ package com.android.settings.notification;
 import android.animation.LayoutTransition;
 import android.app.INotificationManager;
 import android.content.Context;
-import android.net.Uri;
 import android.os.Handler;
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.service.notification.Condition;
 import android.service.notification.IConditionListener;
+import android.service.notification.ZenModeConfig;
 import android.util.Log;
 import android.widget.CompoundButton;
 import android.widget.RadioButton;
@@ -33,6 +33,9 @@ import android.widget.RadioGroup;
 
 import com.android.settings.R;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class ZenModeConditionSelection extends RadioGroup {
     private static final String TAG = "ZenModeConditionSelection";
     private static final boolean DEBUG = true;
@@ -40,28 +43,34 @@ public class ZenModeConditionSelection extends RadioGroup {
     private final INotificationManager mNoMan;
     private final H mHandler = new H();
     private final Context mContext;
+    private final List<Condition> mConditions;
+    private Condition mCondition;
 
     public ZenModeConditionSelection(Context context) {
         super(context);
         mContext = context;
+        mConditions = new ArrayList<Condition>();
         setLayoutTransition(new LayoutTransition());
         final int p = mContext.getResources().getDimensionPixelSize(R.dimen.content_margin_left);
         setPadding(p, p, p, 0);
         mNoMan = INotificationManager.Stub.asInterface(
                 ServiceManager.getService(Context.NOTIFICATION_SERVICE));
         final RadioButton b = newRadioButton(null);
-        b.setText(R.string.zen_mode_default_option);
+        b.setText(mContext.getString(com.android.internal.R.string.zen_mode_forever));
         b.setChecked(true);
+        for (int i = ZenModeConfig.MINUTE_BUCKETS.length - 1; i >= 0; --i) {
+            handleCondition(ZenModeConfig.toTimeCondition(ZenModeConfig.MINUTE_BUCKETS[i]));
+        }
     }
 
-    private RadioButton newRadioButton(Object tag) {
+    private RadioButton newRadioButton(Condition condition) {
         final RadioButton button = new RadioButton(mContext);
-        button.setTag(tag);
+        button.setTag(condition);
         button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 if (isChecked) {
-                    handleSubscribe((Uri)button.getTag());
+                    setCondition((Condition) button.getTag());
                 }
             }
         });
@@ -72,43 +81,54 @@ public class ZenModeConditionSelection extends RadioGroup {
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
-        requestZenModeConditions(true);
+        requestZenModeConditions(Condition.FLAG_RELEVANT_NOW);
     }
 
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        requestZenModeConditions(false);
+        requestZenModeConditions(0 /*none*/);
     }
 
-    protected void requestZenModeConditions(boolean requested) {
-        if (DEBUG) Log.d(TAG, "requestZenModeConditions " + requested);
+    protected void requestZenModeConditions(int relevance) {
+        if (DEBUG) Log.d(TAG, "requestZenModeConditions " + Condition.relevanceToString(relevance));
         try {
-            mNoMan.requestZenModeConditions(mListener, requested);
+            mNoMan.requestZenModeConditions(mListener, relevance);
         } catch (RemoteException e) {
             // noop
         }
     }
 
     protected void handleConditions(Condition[] conditions) {
-        for (final Condition c : conditions) {
-            RadioButton v = (RadioButton) findViewWithTag(c.id);
-            if (c.state == Condition.STATE_FALSE || c.state == Condition.STATE_UNKNOWN) {
-                if (v == null) {
-                    v = newRadioButton(c.id);
-                }
-            }
-            if (v != null) {
-                v.setText(c.caption);
-                v.setEnabled(c.state == Condition.STATE_FALSE);
+        for (Condition c : conditions) {
+            handleCondition(c);
+        }
+    }
+
+    protected void handleCondition(Condition c) {
+        if (mConditions.contains(c)) return;
+        RadioButton v = (RadioButton) findViewWithTag(c.id);
+        if (c.state == Condition.STATE_TRUE || c.state == Condition.STATE_UNKNOWN) {
+            if (v == null) {
+                v = newRadioButton(c);
             }
         }
+        if (v != null) {
+            v.setText(c.summary);
+            v.setEnabled(c.state == Condition.STATE_TRUE);
+        }
+        mConditions.add(c);
+    }
+
+    protected void setCondition(Condition c) {
+        if (DEBUG) Log.d(TAG, "setCondition " + c);
+        mCondition = c;
     }
 
-    protected void handleSubscribe(Uri id) {
-        if (DEBUG) Log.d(TAG, "handleSubscribe " + id);
+    public void confirmCondition() {
+        if (DEBUG) Log.d(TAG, "confirmCondition " + mCondition);
         try {
-            mNoMan.setZenModeCondition(id);
+            mNoMan.setZenModeCondition(mCondition);
         } catch (RemoteException e) {
             // noop
         }
@@ -127,7 +147,7 @@ public class ZenModeConditionSelection extends RadioGroup {
 
         @Override
         public void handleMessage(Message msg) {
-            if (msg.what == CONDITIONS) handleConditions((Condition[])msg.obj);
+            if (msg.what == CONDITIONS) handleConditions((Condition[]) msg.obj);
         }
     }
 }