diff options
Diffstat (limited to 'packages/SystemUI/src/com/android')
10 files changed, 166 insertions, 72 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index dd75921..64c67b1 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -43,6 +43,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView boolean mVisible; boolean mTaskLaunched; + // Broadcast receiver to handle messages from our RecentsService BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -63,6 +64,14 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView } }; + // Broadcast receiver to handle messages from the system + BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + finish(); + } + }; + /** Updates the set of recent tasks */ void updateRecentsTasks() { RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); @@ -111,12 +120,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView RecentsTaskLoader.initialize(this); RecentsConfiguration.reinitialize(this); - // Set the background dim - WindowManager.LayoutParams wlp = getWindow().getAttributes(); - wlp.dimAmount = Constants.Values.Window.BackgroundDim; - getWindow().setAttributes(wlp); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); - // Create the view hierarchy mRecentsView = new RecentsView(this); mRecentsView.setCallbacks(this); @@ -170,22 +173,44 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onResume]", "", Console.AnsiRed); super.onResume(); + } + + @Override + public void onAttachedToWindow() { + Console.log(Constants.DebugFlags.App.SystemUIHandshake, + "[RecentsActivity|onAttachedToWindow]", "", + Console.AnsiRed); + super.onAttachedToWindow(); // Register the broadcast receiver to handle messages from our service IntentFilter filter = new IntentFilter(); filter.addAction(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY); filter.addAction(RecentsService.ACTION_FINISH_RECENTS_ACTIVITY); registerReceiver(mServiceBroadcastReceiver, filter); + + // Register the broadcast receiver to handle messages when the screen is turned off + filter = new IntentFilter(); + filter.addAction(Intent.ACTION_SCREEN_OFF); + registerReceiver(mScreenOffReceiver, filter); } @Override - protected void onPause() { - Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onPause]", "", + public void onDetachedFromWindow() { + Console.log(Constants.DebugFlags.App.SystemUIHandshake, + "[RecentsActivity|onDetachedFromWindow]", "", Console.AnsiRed); - super.onPause(); + super.onDetachedFromWindow(); // Unregister any broadcast receivers we have registered unregisterReceiver(mServiceBroadcastReceiver); + unregisterReceiver(mScreenOffReceiver); + } + + @Override + protected void onPause() { + Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onPause]", "", + Console.AnsiRed); + super.onPause(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java index 4a0de0b..94a655f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java @@ -17,6 +17,7 @@ package com.android.systemui.recents; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; import android.util.DisplayMetrics; @@ -62,6 +63,12 @@ public class RecentsConfiguration { DisplayMetrics dm = res.getDisplayMetrics(); mDisplayMetrics = dm; + boolean isLandscape = res.getConfiguration().orientation == + Configuration.ORIENTATION_LANDSCAPE; + Console.log(Constants.DebugFlags.UI.MeasureAndLayout, + "[RecentsConfiguration|orientation]", isLandscape ? "Landscape" : "Portrait", + Console.AnsiGreen); + displayRect.set(0, 0, dm.widthPixels, dm.heightPixels); animationPxMovementPerSecond = res.getDimensionPixelSize(R.dimen.recents_animation_movement_in_dps_per_second); diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java index d661f287..754d956 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java @@ -22,7 +22,6 @@ import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; @@ -213,6 +212,7 @@ class TaskResourceLoader implements Runnable { Console.log(Constants.DebugFlags.App.TaskDataLoader, " [TaskResourceLoader|loadThumbnail]", thumbnail); + thumbnail.setHasAlpha(false); loadThumbnail = thumbnail; mThumbnailCache.put(t.key, thumbnail); } else { @@ -331,13 +331,9 @@ public class RecentsTaskLoader { // Create the default assets Bitmap icon = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + icon.eraseColor(0x00000000); mDefaultThumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(); - c.setBitmap(icon); - c.drawColor(0x00000000); - c.setBitmap(mDefaultThumbnail); - c.drawColor(0x00000000); - c.setBitmap(null); + mDefaultThumbnail.eraseColor(0x00000000); mDefaultApplicationIcon = new BitmapDrawable(context.getResources(), icon); Console.log(Constants.DebugFlags.App.TaskDataLoader, "[RecentsTaskLoader|defaultBitmaps]", @@ -454,6 +450,7 @@ public class RecentsTaskLoader { "[RecentsTaskLoader|loadingTaskThumbnail]"); task.thumbnail = ssp.getTaskThumbnail(task.key.id); if (task.thumbnail != null) { + task.thumbnail.setHasAlpha(false); mThumbnailCache.put(task.key, task.thumbnail); } else { task.thumbnail = mDefaultThumbnail; diff --git a/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java index efcd948..505238d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java @@ -24,7 +24,6 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -52,9 +51,7 @@ public class SystemServicesProxy { if (Constants.DebugFlags.App.EnableSystemServicesProxy) { // Create a dummy icon mDummyIcon = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(mDummyIcon); - c.drawColor(0xFF999999); - c.setBitmap(null); + mDummyIcon.eraseColor(0xFF999999); } } @@ -117,9 +114,7 @@ public class SystemServicesProxy { // If we are mocking, then just return a dummy thumbnail if (Constants.DebugFlags.App.EnableSystemServicesProxy) { Bitmap thumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(thumbnail); - c.drawColor(0xff333333); - c.setBitmap(null); + thumbnail.eraseColor(0xff333333); return thumbnail; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 1ebe231..141d870 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -108,6 +108,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); @@ -118,6 +119,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV // We measure our stack views sans the status bar. It will handle the nav bar itself. RecentsConfiguration config = RecentsConfiguration.getInstance(); + int childWidth = width - config.systemInsets.right; int childHeight = height - config.systemInsets.top; // Measure each child @@ -125,7 +127,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV for (int i = 0; i < childCount; i++) { final View child = getChildAt(i); if (child.getVisibility() != GONE) { - child.measure(widthMeasureSpec, + child.measure(MeasureSpec.makeMeasureSpec(childWidth, widthMode), MeasureSpec.makeMeasureSpec(childHeight, heightMode)); } } @@ -255,11 +257,11 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_NEW_TASK); try { + UserHandle taskUser = new UserHandle(task.userId); if (opts != null) { - getContext().startActivityAsUser(i, opts.toBundle(), - new UserHandle(task.userId)); + getContext().startActivityAsUser(i, opts.toBundle(), taskUser); } else { - getContext().startActivityAsUser(i, new UserHandle(task.userId)); + getContext().startActivityAsUser(i, taskUser); } } catch (ActivityNotFoundException anfe) { Console.logError(getContext(), "Could not start Activity"); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index fa06764..c9a491e 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -524,8 +524,8 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal (Constants.Values.TaskStackView.StackPeekHeightPct * mStackRect.height())); int size = Math.min(minHeight, Math.min(mStackRect.width(), mStackRect.height())); int centerX = mStackRect.centerX(); - mTaskRect.set(centerX - size / 2, mStackRectSansPeek.top, - centerX + size / 2, mStackRectSansPeek.top + size); + mTaskRect.set(mStackRect.left, mStackRectSansPeek.top, + mStackRect.right, mStackRectSansPeek.top + size); // Update the scroll bounds updateMinMaxScroll(false); diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java new file mode 100644 index 0000000..a0a5561 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.SeekBar; + +public class ToggleSeekBar extends SeekBar { + public ToggleSeekBar(Context context) { + super(context); + } + + public ToggleSeekBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ToggleSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!isEnabled()) { + setEnabled(true); + } + + return super.onTouchEvent(event); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java index c99f691..7d38058 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java +++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java @@ -19,20 +19,18 @@ package com.android.systemui.settings; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.android.systemui.R; -public class ToggleSlider extends RelativeLayout - implements CompoundButton.OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener { - private static final String TAG = "StatusBar.ToggleSlider"; - +public class ToggleSlider extends RelativeLayout { public interface Listener { public void onInit(ToggleSlider v); public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value); @@ -55,20 +53,21 @@ public class ToggleSlider extends RelativeLayout public ToggleSlider(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + View.inflate(context, R.layout.status_bar_toggle_slider, this); final Resources res = context.getResources(); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleSlider, - defStyle, 0); + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.ToggleSlider, defStyle, 0); - mToggle = (CompoundButton)findViewById(R.id.toggle); - mToggle.setOnCheckedChangeListener(this); - mToggle.setBackgroundDrawable(res.getDrawable(R.drawable.status_bar_toggle_button)); + mToggle = (CompoundButton) findViewById(R.id.toggle); + mToggle.setOnCheckedChangeListener(mCheckListener); + mToggle.setBackground(res.getDrawable(R.drawable.status_bar_toggle_button)); - mSlider = (SeekBar)findViewById(R.id.slider); - mSlider.setOnSeekBarChangeListener(this); + mSlider = (SeekBar) findViewById(R.id.slider); + mSlider.setOnSeekBarChangeListener(mSeekListener); - mLabel = (TextView)findViewById(R.id.label); + mLabel = (TextView) findViewById(R.id.label); mLabel.setText(a.getString(R.styleable.ToggleSlider_text)); a.recycle(); @@ -82,35 +81,6 @@ public class ToggleSlider extends RelativeLayout } } - public void onCheckedChanged(CompoundButton toggle, boolean checked) { - mSlider.setEnabled(checked); - - if (mListener != null) { - mListener.onChanged(this, mTracking, checked, mSlider.getProgress()); - } - } - - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (mListener != null) { - mListener.onChanged(this, mTracking, mToggle.isChecked(), progress); - } - } - - public void onStartTrackingTouch(SeekBar seekBar) { - mTracking = true; - if (mListener != null) { - mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); - } - mToggle.setChecked(false); - } - - public void onStopTrackingTouch(SeekBar seekBar) { - mTracking = false; - if (mListener != null) { - mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress()); - } - } - public void setOnChangedListener(Listener l) { mListener = l; } @@ -130,5 +100,49 @@ public class ToggleSlider extends RelativeLayout public void setValue(int value) { mSlider.setProgress(value); } + + private final OnCheckedChangeListener mCheckListener = new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton toggle, boolean checked) { + mSlider.setEnabled(!checked); + + if (mListener != null) { + mListener.onChanged( + ToggleSlider.this, mTracking, checked, mSlider.getProgress()); + } + } + }; + + private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (mListener != null) { + mListener.onChanged( + ToggleSlider.this, mTracking, mToggle.isChecked(), progress); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + mTracking = true; + + if (mListener != null) { + mListener.onChanged( + ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress()); + } + + mToggle.setChecked(false); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + mTracking = false; + + if (mListener != null) { + mListener.onChanged( + ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress()); + } + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 04b7f53..e2d6c5b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -31,7 +31,6 @@ import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; -import android.view.ViewParent; import android.widget.OverScroller; import com.android.systemui.ExpandHelper; @@ -710,6 +709,12 @@ public class NotificationStackScrollLayout extends ViewGroup super.onInterceptTouchEvent(ev); } + @Override + protected void onViewRemoved(View child) { + super.onViewRemoved(child); + mCurrentStackScrollState.removeViewStateForView(child); + } + private boolean onInterceptTouchEventScroll(MotionEvent ev) { /* * This method JUST determines whether we want to intercept the motion. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java index 881730a..67a1735 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java @@ -72,6 +72,10 @@ public class StackScrollState { return mStateMap.get(requestedView); } + public void removeViewStateForView(View child) { + mStateMap.remove(child); + } + /** * Apply the properties saved in {@link #mStateMap} to the children of the {@link #mHostView}. * The properties are only applied if they effectively changed. |
