From 80e1f1bfdb814a08fb8b07b2e279285d495042e9 Mon Sep 17 00:00:00 2001 From: Alexandra Gherghina Date: Thu, 31 Jul 2014 14:56:33 +0100 Subject: [PATCH] Extract common functionality for profile spinner into Utils Bug: 16645615 Change-Id: Ic8928fff8294cd99eeb86b69b44b8e4128cadf92 --- src/com/android/settings/Utils.java | 30 +++++++++++++++++++ .../applications/ManageApplications.java | 16 +--------- .../notification/AppNotificationSettings.java | 23 ++++---------- .../settings/print/PrintSettingsFragment.java | 17 ++--------- 4 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index feee90ebd2e..df05adc2a8d 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -66,6 +66,7 @@ import android.view.ViewGroup; import android.widget.ListView; import android.widget.TabWidget; +import com.android.settings.UserSpinnerAdapter.UserDetails; import com.android.settings.dashboard.DashboardCategory; import com.android.settings.dashboard.DashboardTile; import com.android.settings.drawable.CircleFramedDrawable; @@ -73,6 +74,7 @@ import com.android.settings.drawable.CircleFramedDrawable; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -637,6 +639,34 @@ public final class Utils { return currentUser.isManagedProfile(); } + /** + * Creates a {@link UserSpinnerAdapter} if there is more than one profile on the device. + * + *

The adapter can be used to populate a spinner that switches between the Settings + * app on the different profiles. + * + * @return a {@link UserSpinnerAdapter} or null if there is only one profile. + */ + public static UserSpinnerAdapter createUserSpinnerAdapter(UserManager userManager, + Context context) { + List userProfiles = userManager.getUserProfiles(); + if (userProfiles.size() < 2) { + return null; + } + + UserHandle myUserHandle = new UserHandle(UserHandle.myUserId()); + // The first option should be the current profile + userProfiles.remove(myUserHandle); + userProfiles.add(0, myUserHandle); + + ArrayList userDetails = new ArrayList(userProfiles.size()); + final int count = userProfiles.size(); + for (int i = 0; i < count; i++) { + userDetails.add(new UserDetails(userProfiles.get(i), userManager, context)); + } + return new UserSpinnerAdapter(context, userDetails); + } + /** * Returns the target user for a Settings activity. * diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 493caf63fc4..1889634bf8c 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -921,20 +921,7 @@ public class ManageApplications extends Fragment implements mNumTabs = mTabs.size(); final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); - List userProfiles = um.getUserProfiles(); - if (userProfiles.size() >= 2) { - - UserHandle myUserHandle = new UserHandle(UserHandle.myUserId()); - userProfiles.remove(myUserHandle); - userProfiles.add(0, myUserHandle); - ArrayList userDetails = new ArrayList(userProfiles.size()); - final int count = userProfiles.size(); - for (int i = 0; i < count; i++) { - userDetails.add(new UserDetails(userProfiles.get(i), um, mContext)); - } - // TODO: Factor out spinner creation in a method in Utils class. See: http://b/16645615 - mProfileSpinnerAdapter = new UserSpinnerAdapter(mContext, userDetails); - } + mProfileSpinnerAdapter = Utils.createUserSpinnerAdapter(um, mContext); } @@ -1047,7 +1034,6 @@ public class ManageApplications extends Fragment implements public void onItemSelected(AdapterView parent, View view, int position, long id) { UserHandle selectedUser = mProfileSpinnerAdapter.getUserHandle(position); if (selectedUser.getIdentifier() != UserHandle.myUserId()) { - // TODO: Factor out intent starting in a method in Utils class. See: http://b/16645615 Intent intent = new Intent(Settings.ACTION_APPLICATION_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivityAsUser(intent, selectedUser); diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index f8586775e34..d115ad2ffc0 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -53,10 +53,11 @@ import android.widget.SectionIndexer; import android.widget.Spinner; import android.widget.TextView; +import com.android.settings.Settings.AppNotificationSettingsActivity; import com.android.settings.PinnedHeaderListFragment; import com.android.settings.R; import com.android.settings.UserSpinnerAdapter; -import com.android.settings.UserSpinnerAdapter.UserDetails; +import com.android.settings.Utils; import java.text.Collator; import java.util.ArrayList; @@ -108,21 +109,10 @@ public class AppNotificationSettings extends PinnedHeaderListFragment public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - List userProfiles = um.getUserProfiles(); - if (userProfiles.size() >= 2) { + mProfileSpinnerAdapter = Utils.createUserSpinnerAdapter(um, mContext); + if (mProfileSpinnerAdapter != null) { Spinner spinner = (Spinner) getActivity().getLayoutInflater().inflate( R.layout.spinner_view, null); - // TODO: Factor out spinner creation in a method in Utils class. See: http://b/16645615 - UserHandle myUserHandle = new UserHandle(UserHandle.myUserId()); - userProfiles.remove(myUserHandle); - userProfiles.add(0, myUserHandle); - ArrayList userDetails = new ArrayList(userProfiles.size()); - final int count = userProfiles.size(); - for (int i = 0; i < count; i++) { - userDetails.add(new UserDetails(userProfiles.get(i), um, mContext)); - } - - mProfileSpinnerAdapter = new UserSpinnerAdapter(mContext, userDetails); spinner.setAdapter(mProfileSpinnerAdapter); spinner.setOnItemSelectedListener(this); setPinnedHeaderView(spinner); @@ -159,10 +149,7 @@ public class AppNotificationSettings extends PinnedHeaderListFragment public void onItemSelected(AdapterView parent, View view, int position, long id) { UserHandle selectedUser = mProfileSpinnerAdapter.getUserHandle(position); if (selectedUser.getIdentifier() != UserHandle.myUserId()) { - // TODO: Factor out intent starting in a method in Utils class. See: http://b/16645615 - Intent intent = new Intent(); - intent.setClassName(mContext.getPackageName(), - com.android.settings.Settings.AppNotificationSettingsActivity.class.getName()); + Intent intent = new Intent(getActivity(), AppNotificationSettingsActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivityAsUser(intent, selectedUser); getActivity().finish(); diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index 429c01c27b7..2acc7335a75 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -16,7 +16,6 @@ package com.android.settings.print; -import android.app.Activity; import android.app.ActivityManager; import android.app.LoaderManager.LoaderCallbacks; import android.content.AsyncTaskLoader; @@ -63,6 +62,7 @@ import com.android.settings.UserSpinnerAdapter.UserDetails; import com.android.settings.DialogCreatable; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; @@ -182,21 +182,10 @@ public class PrintSettingsFragment extends SettingsPreferenceFragment getListView().setEmptyView(emptyView); final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); - List userProfiles = um.getUserProfiles(); - if (userProfiles.size() >= 2) { + mProfileSpinnerAdapter = Utils.createUserSpinnerAdapter(um, getActivity()); + if (mProfileSpinnerAdapter != null) { Spinner spinner = (Spinner) getActivity().getLayoutInflater().inflate( R.layout.spinner_view, null); - - UserHandle myUserHandle = Process.myUserHandle(); - userProfiles.remove(myUserHandle); - userProfiles.add(0, myUserHandle); - ArrayList userDetails = new ArrayList(userProfiles.size()); - final int count = userProfiles.size(); - for (int i = 0; i < count; i++) { - userDetails.add(new UserDetails(userProfiles.get(i), um, getActivity())); - } - - mProfileSpinnerAdapter = new UserSpinnerAdapter(getActivity(), userDetails); spinner.setAdapter(mProfileSpinnerAdapter); spinner.setOnItemSelectedListener(this); setPinnedHeaderView(spinner);