Loading core/java/android/app/ContextImpl.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -1702,8 +1702,8 @@ class ContextImpl extends Context { throws NameNotFoundException { throws NameNotFoundException { if (packageName.equals("system") || packageName.equals("android")) { if (packageName.equals("system") || packageName.equals("android")) { final ContextImpl context = new ContextImpl(mMainThread.getSystemContext()); final ContextImpl context = new ContextImpl(mMainThread.getSystemContext()); context.mBasePackageName = mBasePackageName; context.mRestricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED; context.mUser = user; context.init(mPackageInfo, null, mMainThread, mResources, mBasePackageName, user); return context; return context; } } Loading packages/SystemUI/res/layout/quick_settings_tile_user.xml +1 −1 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,6 @@ android:layout_gravity="center_horizontal|bottom" android:layout_gravity="center_horizontal|bottom" android:gravity="center" android:gravity="center" android:text="@string/quick_settings_user_label" android:text="@string/quick_settings_user_label" android:background="#33000000" android:background="#CC000000" /> /> </FrameLayout> </FrameLayout> No newline at end of file packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +124 −61 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,19 @@ package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone; import com.android.internal.view.RotationPolicy; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.R; import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState; import com.android.systemui.statusbar.phone.QuickSettingsModel.State; import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.ToggleSlider; import android.app.ActivityManagerNative; import android.app.ActivityManagerNative; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.Dialog; import android.app.Dialog; Loading @@ -29,42 +42,36 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.content.Loader; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.Resources; import android.content.res.Resources; import android.database.Cursor; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LevelListDrawable; import android.graphics.drawable.LevelListDrawable; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager; import android.hardware.display.WifiDisplayStatus; import android.hardware.display.WifiDisplayStatus; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; import android.os.Handler; import android.os.RemoteException; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.ContactsContract; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Profile; import android.provider.Settings; import android.provider.Settings; import android.util.Log; import android.util.Pair; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; import android.view.Window; import android.view.Window; import android.view.WindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.widget.ImageView; import android.widget.ImageView; import android.widget.TextView; import android.widget.TextView; import com.android.internal.view.RotationPolicy; import com.android.systemui.R; import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState; import com.android.systemui.statusbar.phone.QuickSettingsModel.State; import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.ToggleSlider; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -72,6 +79,7 @@ import java.util.ArrayList; * * */ */ class QuickSettings { class QuickSettings { private static final String TAG = "QuickSettings"; public static final boolean SHOW_IME_TILE = false; public static final boolean SHOW_IME_TILE = false; private Context mContext; private Context mContext; Loading @@ -91,11 +99,13 @@ class QuickSettings { private int mBrightnessDialogShortTimeout; private int mBrightnessDialogShortTimeout; private int mBrightnessDialogLongTimeout; private int mBrightnessDialogLongTimeout; private CursorLoader mUserInfoLoader; private AsyncTask<Void, Void, Pair<String, BitmapDrawable>> mUserInfoTask; private LevelListDrawable mBatteryLevels; private LevelListDrawable mBatteryLevels; private LevelListDrawable mChargingBatteryLevels; private LevelListDrawable mChargingBatteryLevels; boolean mTilesSetUp = false; private Handler mHandler; private Handler mHandler; // The set of QuickSettingsTiles that have dynamic spans (and need to be updated on // The set of QuickSettingsTiles that have dynamic spans (and need to be updated on Loading Loading @@ -132,7 +142,14 @@ class QuickSettings { IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter(); filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); mContext.registerReceiver(mReceiver, filter); mContext.registerReceiver(mReceiver, filter); IntentFilter profileFilter = new IntentFilter(); profileFilter.addAction(ContactsContract.Intents.ACTION_PROFILE_CHANGED); profileFilter.addAction(Intent.ACTION_USER_INFO_CHANGED); mContext.registerReceiverAsUser(mProfileReceiver, UserHandle.ALL, profileFilter, null, null); } } void setBar(PanelBar bar) { void setBar(PanelBar bar) { Loading Loading @@ -168,47 +185,51 @@ class QuickSettings { } } private void queryForUserInformation() { private void queryForUserInformation() { System.out.println("queryForUserInformation"); Context currentUserContext = null; UserInfo userInfo = null; Uri userContactUri = Uri.withAppendedPath( try { ContactsContract.Profile.CONTENT_URI, userInfo = ActivityManagerNative.getDefault().getCurrentUser(); ContactsContract.Contacts.Data.CONTENT_DIRECTORY); currentUserContext = mContext.createPackageContextAsUser("android", 0, new UserHandle(userInfo.id)); } catch (NameNotFoundException e) { Log.e(TAG, "Couldn't create user context", e); throw new RuntimeException(e); } catch (RemoteException e) { Log.e(TAG, "Couldn't get user info", e); } final int userId = userInfo.id; String[] selectArgs = { final Context context = currentUserContext; ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, mUserInfoTask = new AsyncTask<Void, Void, Pair<String, BitmapDrawable>>() { ContactsContract.CommonDataKinds.Photo.PHOTO @Override }; protected Pair<String, BitmapDrawable> doInBackground(Void... params) { String where = String.format("(%s = ? OR %s = ?) AND %s IS NULL", Cursor cursor = context.getContentResolver().query( ContactsContract.Contacts.Data.MIMETYPE, Profile.CONTENT_URI, new String[] {Phone._ID, Phone.DISPLAY_NAME}, ContactsContract.Contacts.Data.MIMETYPE, null, null, null); ContactsContract.RawContacts.ACCOUNT_TYPE); String[] whereArgs = { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE }; mUserInfoLoader = new CursorLoader(mContext, userContactUri, selectArgs, where, whereArgs, String name = null; null); try { mUserInfoLoader.registerListener(0, if (cursor.moveToFirst()) { new Loader.OnLoadCompleteListener<Cursor>() { name = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)); @Override public void onLoadComplete(Loader<Cursor> loader, Cursor cursor) { UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); if (cursor != null && cursor.moveToFirst()) { String name = cursor.getString(0); // DISPLAY_NAME BitmapDrawable d = new BitmapDrawable(userManager.getUserIcon(userManager.getUserHandle())); mModel.setUserTileInfo(name, d); /* byte[] photoData = cursor.getBlob(0); Bitmap b = BitmapFactory.decodeByteArray(photoData, 0, photoData.length); */ } } mUserInfoLoader.stopLoading(); } finally { cursor.close(); } } }); final UserManager userManager = mUserInfoLoader.startLoading(); (UserManager) mContext.getSystemService(Context.USER_SERVICE); final BitmapDrawable icon = new BitmapDrawable(mContext.getResources(), userManager.getUserIcon(userId)); return new Pair<String, BitmapDrawable>(name, icon); } @Override protected void onPostExecute(Pair<String, BitmapDrawable> result) { super.onPostExecute(result); mModel.setUserTileInfo(result.first, result.second); mUserInfoTask = null; } }; mUserInfoTask.execute(); } } private void setupQuickSettings() { private void setupQuickSettings() { Loading @@ -220,6 +241,7 @@ class QuickSettings { addTemporaryTiles(mContainerView, inflater); addTemporaryTiles(mContainerView, inflater); queryForUserInformation(); queryForUserInformation(); mTilesSetUp = true; } } private void startSettingsActivity(String action) { private void startSettingsActivity(String action) { Loading Loading @@ -251,11 +273,22 @@ class QuickSettings { @Override @Override public void onClick(View v) { public void onClick(View v) { mBar.collapseAllPanels(true); mBar.collapseAllPanels(true); Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent(mContext, final UserManager um = v, ContactsContract.Profile.CONTENT_URI, (UserManager) mContext.getSystemService(Context.USER_SERVICE); if (um.getUsers().size() > 1) { try { WindowManagerGlobal.getWindowManagerService().lockNow( LockPatternUtils.USER_SWITCH_LOCK_OPTIONS); } catch (RemoteException e) { Log.e(TAG, "Couldn't show user switcher", e); } } else { Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent( mContext, v, ContactsContract.Profile.CONTENT_URI, ContactsContract.QuickContact.MODE_LARGE, null); ContactsContract.QuickContact.MODE_LARGE, null); mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); } } } }); }); mModel.addUserTile(userTile, new QuickSettingsModel.RefreshCallback() { mModel.addUserTile(userTile, new QuickSettingsModel.RefreshCallback() { @Override @Override Loading Loading @@ -748,20 +781,50 @@ class QuickSettings { mModel.onBluetoothStateChange(mBluetoothState); mModel.onBluetoothStateChange(mBluetoothState); } } void reloadUserInfo() { if (mUserInfoTask != null) { mUserInfoTask.cancel(false); mUserInfoTask = null; } if (mTilesSetUp) { queryForUserInformation(); } } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)) { final String action = intent.getAction(); if (DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED.equals(action)) { WifiDisplayStatus status = (WifiDisplayStatus)intent.getParcelableExtra( WifiDisplayStatus status = (WifiDisplayStatus)intent.getParcelableExtra( DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); mWifiDisplayStatus = status; mWifiDisplayStatus = status; applyWifiDisplayStatus(); applyWifiDisplayStatus(); } } else if (BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { if (intent.getAction().equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { int status = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, int status = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, BluetoothAdapter.STATE_DISCONNECTED); BluetoothAdapter.STATE_DISCONNECTED); mBluetoothState.connected = (status == BluetoothAdapter.STATE_CONNECTED); mBluetoothState.connected = (status == BluetoothAdapter.STATE_CONNECTED); applyBluetoothStatus(); applyBluetoothStatus(); } else if (Intent.ACTION_USER_SWITCHED.equals(action)) { reloadUserInfo(); } } }; private final BroadcastReceiver mProfileReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (ContactsContract.Intents.ACTION_PROFILE_CHANGED.equals(action) || Intent.ACTION_USER_INFO_CHANGED.equals(action)) { try { final int userId = ActivityManagerNative.getDefault().getCurrentUser().id; if (getSendingUserId() == userId) { reloadUserInfo(); } } catch (RemoteException e) { Log.e(TAG, "Couldn't get current user id for profile change", e); } } } } } }; }; Loading Loading
core/java/android/app/ContextImpl.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -1702,8 +1702,8 @@ class ContextImpl extends Context { throws NameNotFoundException { throws NameNotFoundException { if (packageName.equals("system") || packageName.equals("android")) { if (packageName.equals("system") || packageName.equals("android")) { final ContextImpl context = new ContextImpl(mMainThread.getSystemContext()); final ContextImpl context = new ContextImpl(mMainThread.getSystemContext()); context.mBasePackageName = mBasePackageName; context.mRestricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED; context.mUser = user; context.init(mPackageInfo, null, mMainThread, mResources, mBasePackageName, user); return context; return context; } } Loading
packages/SystemUI/res/layout/quick_settings_tile_user.xml +1 −1 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,6 @@ android:layout_gravity="center_horizontal|bottom" android:layout_gravity="center_horizontal|bottom" android:gravity="center" android:gravity="center" android:text="@string/quick_settings_user_label" android:text="@string/quick_settings_user_label" android:background="#33000000" android:background="#CC000000" /> /> </FrameLayout> </FrameLayout> No newline at end of file
packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +124 −61 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,19 @@ package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone; import com.android.internal.view.RotationPolicy; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.R; import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState; import com.android.systemui.statusbar.phone.QuickSettingsModel.State; import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.ToggleSlider; import android.app.ActivityManagerNative; import android.app.ActivityManagerNative; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.Dialog; import android.app.Dialog; Loading @@ -29,42 +42,36 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.content.Loader; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.Resources; import android.content.res.Resources; import android.database.Cursor; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LevelListDrawable; import android.graphics.drawable.LevelListDrawable; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager; import android.hardware.display.WifiDisplayStatus; import android.hardware.display.WifiDisplayStatus; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; import android.os.Handler; import android.os.RemoteException; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.ContactsContract; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Profile; import android.provider.Settings; import android.provider.Settings; import android.util.Log; import android.util.Pair; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; import android.view.Window; import android.view.Window; import android.view.WindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.widget.ImageView; import android.widget.ImageView; import android.widget.TextView; import android.widget.TextView; import com.android.internal.view.RotationPolicy; import com.android.systemui.R; import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState; import com.android.systemui.statusbar.phone.QuickSettingsModel.State; import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.ToggleSlider; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -72,6 +79,7 @@ import java.util.ArrayList; * * */ */ class QuickSettings { class QuickSettings { private static final String TAG = "QuickSettings"; public static final boolean SHOW_IME_TILE = false; public static final boolean SHOW_IME_TILE = false; private Context mContext; private Context mContext; Loading @@ -91,11 +99,13 @@ class QuickSettings { private int mBrightnessDialogShortTimeout; private int mBrightnessDialogShortTimeout; private int mBrightnessDialogLongTimeout; private int mBrightnessDialogLongTimeout; private CursorLoader mUserInfoLoader; private AsyncTask<Void, Void, Pair<String, BitmapDrawable>> mUserInfoTask; private LevelListDrawable mBatteryLevels; private LevelListDrawable mBatteryLevels; private LevelListDrawable mChargingBatteryLevels; private LevelListDrawable mChargingBatteryLevels; boolean mTilesSetUp = false; private Handler mHandler; private Handler mHandler; // The set of QuickSettingsTiles that have dynamic spans (and need to be updated on // The set of QuickSettingsTiles that have dynamic spans (and need to be updated on Loading Loading @@ -132,7 +142,14 @@ class QuickSettings { IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter(); filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); mContext.registerReceiver(mReceiver, filter); mContext.registerReceiver(mReceiver, filter); IntentFilter profileFilter = new IntentFilter(); profileFilter.addAction(ContactsContract.Intents.ACTION_PROFILE_CHANGED); profileFilter.addAction(Intent.ACTION_USER_INFO_CHANGED); mContext.registerReceiverAsUser(mProfileReceiver, UserHandle.ALL, profileFilter, null, null); } } void setBar(PanelBar bar) { void setBar(PanelBar bar) { Loading Loading @@ -168,47 +185,51 @@ class QuickSettings { } } private void queryForUserInformation() { private void queryForUserInformation() { System.out.println("queryForUserInformation"); Context currentUserContext = null; UserInfo userInfo = null; Uri userContactUri = Uri.withAppendedPath( try { ContactsContract.Profile.CONTENT_URI, userInfo = ActivityManagerNative.getDefault().getCurrentUser(); ContactsContract.Contacts.Data.CONTENT_DIRECTORY); currentUserContext = mContext.createPackageContextAsUser("android", 0, new UserHandle(userInfo.id)); } catch (NameNotFoundException e) { Log.e(TAG, "Couldn't create user context", e); throw new RuntimeException(e); } catch (RemoteException e) { Log.e(TAG, "Couldn't get user info", e); } final int userId = userInfo.id; String[] selectArgs = { final Context context = currentUserContext; ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, mUserInfoTask = new AsyncTask<Void, Void, Pair<String, BitmapDrawable>>() { ContactsContract.CommonDataKinds.Photo.PHOTO @Override }; protected Pair<String, BitmapDrawable> doInBackground(Void... params) { String where = String.format("(%s = ? OR %s = ?) AND %s IS NULL", Cursor cursor = context.getContentResolver().query( ContactsContract.Contacts.Data.MIMETYPE, Profile.CONTENT_URI, new String[] {Phone._ID, Phone.DISPLAY_NAME}, ContactsContract.Contacts.Data.MIMETYPE, null, null, null); ContactsContract.RawContacts.ACCOUNT_TYPE); String[] whereArgs = { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE }; mUserInfoLoader = new CursorLoader(mContext, userContactUri, selectArgs, where, whereArgs, String name = null; null); try { mUserInfoLoader.registerListener(0, if (cursor.moveToFirst()) { new Loader.OnLoadCompleteListener<Cursor>() { name = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)); @Override public void onLoadComplete(Loader<Cursor> loader, Cursor cursor) { UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); if (cursor != null && cursor.moveToFirst()) { String name = cursor.getString(0); // DISPLAY_NAME BitmapDrawable d = new BitmapDrawable(userManager.getUserIcon(userManager.getUserHandle())); mModel.setUserTileInfo(name, d); /* byte[] photoData = cursor.getBlob(0); Bitmap b = BitmapFactory.decodeByteArray(photoData, 0, photoData.length); */ } } mUserInfoLoader.stopLoading(); } finally { cursor.close(); } } }); final UserManager userManager = mUserInfoLoader.startLoading(); (UserManager) mContext.getSystemService(Context.USER_SERVICE); final BitmapDrawable icon = new BitmapDrawable(mContext.getResources(), userManager.getUserIcon(userId)); return new Pair<String, BitmapDrawable>(name, icon); } @Override protected void onPostExecute(Pair<String, BitmapDrawable> result) { super.onPostExecute(result); mModel.setUserTileInfo(result.first, result.second); mUserInfoTask = null; } }; mUserInfoTask.execute(); } } private void setupQuickSettings() { private void setupQuickSettings() { Loading @@ -220,6 +241,7 @@ class QuickSettings { addTemporaryTiles(mContainerView, inflater); addTemporaryTiles(mContainerView, inflater); queryForUserInformation(); queryForUserInformation(); mTilesSetUp = true; } } private void startSettingsActivity(String action) { private void startSettingsActivity(String action) { Loading Loading @@ -251,11 +273,22 @@ class QuickSettings { @Override @Override public void onClick(View v) { public void onClick(View v) { mBar.collapseAllPanels(true); mBar.collapseAllPanels(true); Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent(mContext, final UserManager um = v, ContactsContract.Profile.CONTENT_URI, (UserManager) mContext.getSystemService(Context.USER_SERVICE); if (um.getUsers().size() > 1) { try { WindowManagerGlobal.getWindowManagerService().lockNow( LockPatternUtils.USER_SWITCH_LOCK_OPTIONS); } catch (RemoteException e) { Log.e(TAG, "Couldn't show user switcher", e); } } else { Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent( mContext, v, ContactsContract.Profile.CONTENT_URI, ContactsContract.QuickContact.MODE_LARGE, null); ContactsContract.QuickContact.MODE_LARGE, null); mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); } } } }); }); mModel.addUserTile(userTile, new QuickSettingsModel.RefreshCallback() { mModel.addUserTile(userTile, new QuickSettingsModel.RefreshCallback() { @Override @Override Loading Loading @@ -748,20 +781,50 @@ class QuickSettings { mModel.onBluetoothStateChange(mBluetoothState); mModel.onBluetoothStateChange(mBluetoothState); } } void reloadUserInfo() { if (mUserInfoTask != null) { mUserInfoTask.cancel(false); mUserInfoTask = null; } if (mTilesSetUp) { queryForUserInformation(); } } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)) { final String action = intent.getAction(); if (DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED.equals(action)) { WifiDisplayStatus status = (WifiDisplayStatus)intent.getParcelableExtra( WifiDisplayStatus status = (WifiDisplayStatus)intent.getParcelableExtra( DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); mWifiDisplayStatus = status; mWifiDisplayStatus = status; applyWifiDisplayStatus(); applyWifiDisplayStatus(); } } else if (BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { if (intent.getAction().equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { int status = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, int status = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, BluetoothAdapter.STATE_DISCONNECTED); BluetoothAdapter.STATE_DISCONNECTED); mBluetoothState.connected = (status == BluetoothAdapter.STATE_CONNECTED); mBluetoothState.connected = (status == BluetoothAdapter.STATE_CONNECTED); applyBluetoothStatus(); applyBluetoothStatus(); } else if (Intent.ACTION_USER_SWITCHED.equals(action)) { reloadUserInfo(); } } }; private final BroadcastReceiver mProfileReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (ContactsContract.Intents.ACTION_PROFILE_CHANGED.equals(action) || Intent.ACTION_USER_INFO_CHANGED.equals(action)) { try { final int userId = ActivityManagerNative.getDefault().getCurrentUser().id; if (getSendingUserId() == userId) { reloadUserInfo(); } } catch (RemoteException e) { Log.e(TAG, "Couldn't get current user id for profile change", e); } } } } } }; }; Loading