diff options
Diffstat (limited to 'packages/SystemUI')
12 files changed, 99 insertions, 110 deletions
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_time.xml b/packages/SystemUI/res/layout/quick_settings_tile_time.xml index 4ffbf52..910e1f6 100644 --- a/packages/SystemUI/res/layout/quick_settings_tile_time.xml +++ b/packages/SystemUI/res/layout/quick_settings_tile_time.xml @@ -29,10 +29,11 @@ android:hand_hour="@drawable/ic_qs_clock_hour" android:hand_minute="@drawable/ic_qs_clock_minute" /> - <com.android.systemui.statusbar.policy.QuickSettingsDateView + <com.android.systemui.statusbar.policy.DateView android:textAppearance="@style/TextAppearance.QuickSettings.TileView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:gravity="center" /> -</LinearLayout>
\ No newline at end of file +</LinearLayout> diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java index f93da08..140cc80 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java @@ -17,6 +17,7 @@ package com.android.systemui.recent; import android.app.Activity; +import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -30,6 +31,8 @@ import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.statusbar.tablet.StatusBarPanel; +import java.util.List; + public class RecentsActivity extends Activity { public static final String TOGGLE_RECENTS_INTENT = "com.android.systemui.TOGGLE_RECENTS"; public static final String CLOSE_RECENTS_INTENT = "com.android.systemui.CLOSE_RECENTS"; @@ -122,11 +125,15 @@ public class RecentsActivity extends Activity { public void dismissAndGoBack() { if (mRecentsPanel != null) { - final SystemUIApplication app = (SystemUIApplication) getApplication(); - final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader(); - TaskDescription firstTask = mRecentsPanel.getBottomTask(); - if (firstTask != null && mRecentsPanel.simulateClick(firstTask)) { - // recents panel will take care of calling show(false); + final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + + final List<ActivityManager.RecentTaskInfo> recentTasks = + am.getRecentTasks(2, + ActivityManager.RECENT_WITH_EXCLUDED | + ActivityManager.RECENT_IGNORE_UNAVAILABLE); + if (recentTasks.size() > 1 && + mRecentsPanel.simulateClick(recentTasks.get(1).persistentId)) { + // recents panel will take care of calling show(false) through simulateClick return; } mRecentsPanel.show(false); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java index 4aa2095..6cb7dec 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java @@ -76,11 +76,11 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView } } - public View findViewForTask(TaskDescription task) { + public View findViewForTask(int persistentTaskId) { for (int i = 0; i < mLinearLayout.getChildCount(); i++) { View v = mLinearLayout.getChildAt(i); RecentsPanelView.ViewHolder holder = (RecentsPanelView.ViewHolder) v.getTag(); - if (holder.taskDescription == task) { + if (holder.taskDescription.persistentTaskId == persistentTaskId) { return v; } } @@ -156,19 +156,19 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView } setLayoutTransition(transitioner); - // Scroll to end after layout. - final ViewTreeObserver observer = getViewTreeObserver(); + // Scroll to end after initial layout. final OnGlobalLayoutListener updateScroll = new OnGlobalLayoutListener() { public void onGlobalLayout() { mLastScrollPosition = scrollPositionOfMostRecent(); scrollTo(mLastScrollPosition, 0); + final ViewTreeObserver observer = getViewTreeObserver(); if (observer.isAlive()) { observer.removeOnGlobalLayoutListener(this); } } }; - observer.addOnGlobalLayoutListener(updateScroll); + getViewTreeObserver().addOnGlobalLayoutListener(updateScroll); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 3a89059..ff51996 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -95,7 +95,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener public void setAdapter(TaskDescriptionAdapter adapter); public void setCallback(RecentsCallback callback); public void setMinSwipeAlpha(float minAlpha); - public View findViewForTask(TaskDescription task); + public View findViewForTask(int persistentTaskId); } private final class OnLongClickDelegate implements View.OnLongClickListener { @@ -518,24 +518,6 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener showIfReady(); } - public TaskDescription getBottomTask() { - if (mRecentsContainer != null) { - ViewGroup container = mRecentsContainer; - if (container instanceof RecentsScrollView) { - container = (ViewGroup) container.findViewById( - R.id.recents_linear_layout); - } - if (container.getChildCount() > 0) { - View v = container.getChildAt(container.getChildCount() - 1); - if (v.getTag() instanceof ViewHolder) { - ViewHolder h = (ViewHolder)v.getTag(); - return h.taskDescription; - } - } - } - return null; - } - public void onWindowAnimationStart() { if (mItemToAnimateInWhenWindowAnimationIsFinished != null) { final int startDelay = 100; @@ -590,7 +572,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener public void onTasksLoaded(ArrayList<TaskDescription> tasks, boolean firstScreenful) { mNumItemsWaitingForThumbnailsAndIcons = firstScreenful - ? tasks.size() : mRecentTaskDescriptions == null + ? tasks.size() : mRecentTaskDescriptions == null ? 0 : mRecentTaskDescriptions.size(); if (mRecentTaskDescriptions == null) { mRecentTaskDescriptions = new ArrayList<TaskDescription>(tasks); @@ -622,11 +604,11 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener setContentDescription(recentAppsAccessibilityDescription); } - public boolean simulateClick(TaskDescription task) { + public boolean simulateClick(int persistentTaskId) { if (mRecentsContainer instanceof RecentsScrollView){ RecentsScrollView scrollView = (RecentsScrollView) mRecentsContainer; - View v = scrollView.findViewForTask(task); + View v = scrollView.findViewForTask(persistentTaskId); if (v != null) { handleOnClick(v); return true; diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java index 5e0df49..47b0113 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java @@ -77,11 +77,11 @@ public class RecentsVerticalScrollView extends ScrollView } } - public View findViewForTask(TaskDescription task) { + public View findViewForTask(int persistentTaskId) { for (int i = 0; i < mLinearLayout.getChildCount(); i++) { View v = mLinearLayout.getChildAt(i); RecentsPanelView.ViewHolder holder = (RecentsPanelView.ViewHolder) v.getTag(); - if (holder.taskDescription == task) { + if (holder.taskDescription.persistentTaskId == persistentTaskId) { return v; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index f623692..6b9bc89 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -83,7 +83,11 @@ public class PanelBar extends FrameLayout { // figure out which panel needs to be talked to here if (event.getAction() == MotionEvent.ACTION_DOWN) { final PanelView panel = selectPanelForTouchX(event.getX()); - LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s", mState, panel); + boolean enabled = panel.isEnabled(); + LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s %s", mState, panel, + (enabled ? "" : " (disabled)")); + if (!enabled) + return false; startOpeningPanel(panel); } final boolean result = mTouchingPanel.getHandle().dispatchTouchEvent(event); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 12e749d..493a92a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -30,6 +30,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; +import android.database.ContentObserver; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.PixelFormat; @@ -39,6 +40,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.NinePatchDrawable; import android.inputmethodservice.InputMethodService; +import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.RemoteException; @@ -259,6 +261,26 @@ public class PhoneStatusBar extends BaseStatusBar { } }; + // ensure quick settings is disabled until the current user makes it through the setup wizard + private boolean mUserSetup = false; + private ContentObserver mUserSetupObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + final boolean userSetup = 0 != Settings.Secure.getIntForUser( + mContext.getContentResolver(), + Settings.Secure.USER_SETUP_COMPLETE, + 0 /*default */, + mCurrentUserId); + if (userSetup != mUserSetup) { + mUserSetup = userSetup; + if (mSettingsPanel != null) + mSettingsPanel.setEnabled(mUserSetup); + if (!mUserSetup && mStatusBarView != null) + animateCollapseQuickSettings(); + } + } + }; + @Override public void start() { mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)) @@ -461,6 +483,9 @@ public class PhoneStatusBar extends BaseStatusBar { filter.addAction(Intent.ACTION_SCREEN_ON); context.registerReceiver(mBroadcastReceiver, filter); + // listen for USER_SETUP_COMPLETE setting (per-user) + resetUserSetupObserver(); + return mStatusBarView; } @@ -1827,8 +1852,18 @@ public class PhoneStatusBar extends BaseStatusBar { if (MULTIUSER_DEBUG) mNotificationPanelDebugText.setText("USER " + newUserId); animateCollapsePanels(); updateNotificationIcons(); + resetUserSetupObserver(); } - + + private void resetUserSetupObserver() { + mContext.getContentResolver().unregisterContentObserver(mUserSetupObserver); + mUserSetupObserver.onChange(false); + mContext.getContentResolver().registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), true, + mUserSetupObserver, + mCurrentUserId); + } + private void setIntruderAlertVisibility(boolean vis) { if (!ENABLE_INTRUDERS) return; if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java deleted file mode 100644 index c52f94b..0000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2008 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.statusbar.policy; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.text.format.DateFormat; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewParent; -import android.widget.TextView; - -import com.android.systemui.R; - -import java.util.Date; - -public final class QuickSettingsDateView extends DateView { - - public QuickSettingsDateView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - protected void updateClock() { - final Context context = getContext(); - Date now = new Date(); - CharSequence dow = DateFormat.format("MMM d, yyyy", now); - setText(dow); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java index 5007cf4..ff06630 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java @@ -26,6 +26,7 @@ import android.net.Uri; import android.hardware.usb.UsbAccessory; import android.hardware.usb.UsbManager; import android.os.Bundle; +import android.os.UserHandle; import android.util.Log; import com.android.internal.app.AlertActivity; @@ -90,7 +91,7 @@ public class UsbAccessoryUriActivity extends AlertActivity intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { - startActivity(intent); + startActivityAsUser(intent, UserHandle.CURRENT); } catch (ActivityNotFoundException e) { Log.e(TAG, "startActivity failed for " + mUri); } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java index 030a261..3eccccd 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java @@ -16,23 +16,21 @@ package com.android.systemui.usb; -import android.app.Activity; import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.hardware.usb.IUsbManager; -import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbAccessory; +import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.IBinder; -import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -42,7 +40,6 @@ import android.widget.TextView; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; - import com.android.systemui.R; public class UsbConfirmActivity extends AlertActivity @@ -62,10 +59,10 @@ public class UsbConfirmActivity extends AlertActivity public void onCreate(Bundle icicle) { super.onCreate(icicle); - Intent intent = getIntent(); - mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + Intent intent = getIntent(); + mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); - mResolveInfo = (ResolveInfo)intent.getParcelableExtra("rinfo"); + mResolveInfo = (ResolveInfo) intent.getParcelableExtra("rinfo"); PackageManager packageManager = getPackageManager(); String appName = mResolveInfo.loadLabel(packageManager).toString(); @@ -117,7 +114,8 @@ public class UsbConfirmActivity extends AlertActivity try { IBinder b = ServiceManager.getService(USB_SERVICE); IUsbManager service = IUsbManager.Stub.asInterface(b); - int uid = mResolveInfo.activityInfo.applicationInfo.uid; + final int uid = mResolveInfo.activityInfo.applicationInfo.uid; + final int userId = UserHandle.myUserId(); boolean alwaysUse = mAlwaysUse.isChecked(); Intent intent = null; @@ -129,9 +127,10 @@ public class UsbConfirmActivity extends AlertActivity service.grantDevicePermission(mDevice, uid); // set or clear default setting if (alwaysUse) { - service.setDevicePackage(mDevice, mResolveInfo.activityInfo.packageName); + service.setDevicePackage( + mDevice, mResolveInfo.activityInfo.packageName, userId); } else { - service.setDevicePackage(mDevice, null); + service.setDevicePackage(mDevice, null, userId); } } else if (mAccessory != null) { intent = new Intent(UsbManager.ACTION_USB_ACCESSORY_ATTACHED); @@ -141,10 +140,10 @@ public class UsbConfirmActivity extends AlertActivity service.grantAccessoryPermission(mAccessory, uid); // set or clear default setting if (alwaysUse) { - service.setAccessoryPackage(mAccessory, - mResolveInfo.activityInfo.packageName); + service.setAccessoryPackage( + mAccessory, mResolveInfo.activityInfo.packageName, userId); } else { - service.setAccessoryPackage(mAccessory, null); + service.setAccessoryPackage(mAccessory, null, userId); } } @@ -152,7 +151,7 @@ public class UsbConfirmActivity extends AlertActivity intent.setComponent( new ComponentName(mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name)); - startActivity(intent); + startActivityAsUser(intent, new UserHandle(userId)); } catch (Exception e) { Log.e(TAG, "Unable to start activity", e); } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java index c384f50..6e88d0d 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java @@ -32,6 +32,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -67,7 +68,7 @@ public class UsbPermissionActivity extends AlertActivity mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); mPendingIntent = (PendingIntent)intent.getParcelableExtra(Intent.EXTRA_INTENT); - mUid = intent.getIntExtra("uid", 0); + mUid = intent.getIntExtra(Intent.EXTRA_UID, -1); mPackageName = intent.getStringExtra("package"); PackageManager packageManager = getPackageManager(); @@ -128,7 +129,8 @@ public class UsbPermissionActivity extends AlertActivity if (mPermissionGranted) { service.grantDevicePermission(mDevice, mUid); if (mAlwaysUse.isChecked()) { - service.setDevicePackage(mDevice, mPackageName); + final int userId = UserHandle.getUserId(mUid); + service.setDevicePackage(mDevice, mPackageName, userId); } } } @@ -137,7 +139,8 @@ public class UsbPermissionActivity extends AlertActivity if (mPermissionGranted) { service.grantAccessoryPermission(mAccessory, mUid); if (mAlwaysUse.isChecked()) { - service.setAccessoryPackage(mAccessory, mPackageName); + final int userId = UserHandle.getUserId(mUid); + service.setAccessoryPackage(mAccessory, mPackageName, userId); } } } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java index f61ecb1..9928f7f 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java @@ -16,8 +16,6 @@ package com.android.systemui.usb; -import com.android.internal.app.ResolverActivity; - import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.pm.ResolveInfo; @@ -30,9 +28,11 @@ import android.os.IBinder; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.util.Log; import android.widget.CheckBox; +import com.android.internal.app.ResolverActivity; import com.android.systemui.R; import java.util.ArrayList; @@ -92,34 +92,36 @@ public class UsbResolverActivity extends ResolverActivity { super.onDestroy(); } + @Override protected void onIntentSelected(ResolveInfo ri, Intent intent, boolean alwaysCheck) { try { IBinder b = ServiceManager.getService(USB_SERVICE); IUsbManager service = IUsbManager.Stub.asInterface(b); - int uid = ri.activityInfo.applicationInfo.uid; + final int uid = ri.activityInfo.applicationInfo.uid; + final int userId = UserHandle.myUserId(); if (mDevice != null) { // grant permission for the device service.grantDevicePermission(mDevice, uid); // set or clear default setting if (alwaysCheck) { - service.setDevicePackage(mDevice, ri.activityInfo.packageName); + service.setDevicePackage(mDevice, ri.activityInfo.packageName, userId); } else { - service.setDevicePackage(mDevice, null); + service.setDevicePackage(mDevice, null, userId); } } else if (mAccessory != null) { // grant permission for the accessory service.grantAccessoryPermission(mAccessory, uid); // set or clear default setting if (alwaysCheck) { - service.setAccessoryPackage(mAccessory, ri.activityInfo.packageName); + service.setAccessoryPackage(mAccessory, ri.activityInfo.packageName, userId); } else { - service.setAccessoryPackage(mAccessory, null); + service.setAccessoryPackage(mAccessory, null, userId); } } try { - startActivity(intent); + startActivityAsUser(intent, new UserHandle(userId)); } catch (ActivityNotFoundException e) { Log.e(TAG, "startActivity failed", e); } |