Loading core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +49 −14 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { mInjector = injector; } protected boolean isQuietModeEnabled(UserHandle workProfileUserHandle) { return mInjector.isQuietModeEnabled(workProfileUserHandle); } void setOnProfileSelectedListener(OnProfileSelectedListener listener) { mOnProfileSelectedListener = listener; } Loading Loading @@ -339,23 +343,32 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { protected abstract void showNoPersonalToWorkIntentsEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoPersonalAppsAvailableEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoWorkAppsAvailableEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoWorkToPersonalIntentsEmptyState( ResolverListAdapter activeListAdapter); void showEmptyState(ResolverListAdapter listAdapter) { void showNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) { UserHandle listUserHandle = listAdapter.getUserHandle(); if (UserHandle.myUserId() == listUserHandle.getIdentifier() || !hasAppsInOtherProfile(listAdapter)) { if (mWorkProfileUserHandle != null) { if (mWorkProfileUserHandle != null && (UserHandle.myUserId() == listUserHandle.getIdentifier() || !hasAppsInOtherProfile(listAdapter))) { DevicePolicyEventLogger.createEvent( DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_APPS_RESOLVED) .setStrings(getMetricsCategory()) .setBoolean(/*isPersonalProfile*/ listUserHandle == mPersonalProfileUserHandle) .write(); if (listUserHandle == mPersonalProfileUserHandle) { showNoPersonalAppsAvailableEmptyState(listAdapter); } else { showNoWorkAppsAvailableEmptyState(listAdapter); } showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_apps_available, /* subtitleRes */ 0); } else if (mWorkProfileUserHandle == null) { showConsumerUserNoAppsAvailableEmptyState(listAdapter); } } Loading @@ -371,7 +384,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { userHandleToPageIndex(activeListAdapter.getUserHandle())); descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE); View emptyStateView = descriptor.getEmptyStateView(); resetViewVisibilities(emptyStateView); resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon); Loading @@ -395,6 +408,17 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { activeListAdapter.markTabLoaded(); } private void showConsumerUserNoAppsAvailableEmptyState(ResolverListAdapter activeListAdapter) { ProfileDescriptor descriptor = getItem( userHandleToPageIndex(activeListAdapter.getUserHandle())); descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE); View emptyStateView = descriptor.getEmptyStateView(); resetViewVisibilitiesForConsumerUserEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); activeListAdapter.markTabLoaded(); } private void showSpinner(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.INVISIBLE); Loading @@ -402,14 +426,25 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { .setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.empty).setVisibility(View.GONE); } private void resetViewVisibilities(View emptyStateView) { private void resetViewVisibilitiesForWorkProfileEmptyState(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.GONE); emptyStateView.findViewById(R.id.empty).setVisibility(View.GONE); } private void resetViewVisibilitiesForConsumerUserEmptyState(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.GONE); emptyStateView.findViewById(R.id.empty).setVisibility(View.VISIBLE); } protected void showListView(ResolverListAdapter activeListAdapter) { Loading core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java +19 −3 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd View.OnClickListener listener) { showEmptyState(activeListAdapter, R.drawable.ic_work_apps_off, R.string.resolver_turn_on_work_apps_share, R.string.resolver_turn_on_work_apps, /* subtitleRes */ 0, listener); } Loading @@ -185,7 +185,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd showEmptyState(activeListAdapter, R.drawable.ic_sharing_disabled, R.string.resolver_cant_share_with_work_apps, R.string.resolver_cant_share_cross_profile_explanation); R.string.resolver_cant_share_with_work_apps_explanation); } @Override Loading @@ -193,7 +193,23 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd showEmptyState(activeListAdapter, R.drawable.ic_sharing_disabled, R.string.resolver_cant_share_with_personal_apps, R.string.resolver_cant_share_cross_profile_explanation); R.string.resolver_cant_share_with_personal_apps_explanation); } @Override protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_personal_apps_available_share, /* subtitleRes */ 0); } @Override protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_work_apps_available_share, /* subtitleRes */ 0); } class ChooserProfileDescriptor extends ProfileDescriptor { Loading core/java/com/android/internal/app/ResolverActivity.java +6 −8 Original line number Diff line number Diff line Loading @@ -752,6 +752,11 @@ public class ResolverActivity extends Activity implements } mRegistered = true; } if (shouldShowTabs() && mMultiProfilePagerAdapter.isWaitingToEnableWorkProfile()) { if (mMultiProfilePagerAdapter.isQuietModeEnabled(getWorkProfileUserHandle())) { mMultiProfilePagerAdapter.markWorkProfileEnabledBroadcastReceived(); } } mMultiProfilePagerAdapter.getActiveListAdapter().handlePackagesChanged(); updateProfileViewButton(); } Loading Loading @@ -990,7 +995,7 @@ public class ResolverActivity extends Activity implements return; } if (shouldShowEmptyState(listAdapter)) { mMultiProfilePagerAdapter.showEmptyState(listAdapter); mMultiProfilePagerAdapter.showNoAppsAvailableEmptyState(listAdapter); } else { mMultiProfilePagerAdapter.showListView(listAdapter); } Loading Loading @@ -1603,8 +1608,6 @@ public class ResolverActivity extends Activity implements } private void resetTabsHeaderStyle(TabWidget tabWidget) { String workContentDescription = getString(R.string.resolver_work_tab_accessibility); String personalContentDescription = getString(R.string.resolver_personal_tab_accessibility); for (int i = 0; i < tabWidget.getChildCount(); i++) { View tabView = tabWidget.getChildAt(i); TextView title = tabView.findViewById(android.R.id.title); Loading @@ -1612,11 +1615,6 @@ public class ResolverActivity extends Activity implements title.setTextColor(getAttrColor(this, android.R.attr.textColorTertiary)); title.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.resolver_tab_text_size)); if (title.getText().equals(getString(R.string.resolver_personal_tab))) { tabView.setContentDescription(personalContentDescription); } else if (title.getText().equals(getString(R.string.resolver_work_tab))) { tabView.setContentDescription(workContentDescription); } } } Loading core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +17 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA View.OnClickListener listener) { showEmptyState(activeListAdapter, R.drawable.ic_work_apps_off, R.string.resolver_turn_on_work_apps_view, R.string.resolver_turn_on_work_apps, /* subtitleRes */ 0, listener); } Loading @@ -188,6 +188,22 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA R.string.resolver_cant_access_personal_apps_explanation); } @Override protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_personal_apps_available_resolve, /* subtitleRes */ 0); } @Override protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_work_apps_available_resolve, /* subtitleRes */ 0); } class ResolverProfileDescriptor extends ProfileDescriptor { private ResolverListAdapter resolverListAdapter; final ListView listView; Loading core/res/res/layout/resolver_empty_states.xml +9 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/resolver_empty_state" android:layout_width="match_parent" android:layout_height="@dimen/resolver_empty_state_height" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" android:visibility="gone" Loading Loading @@ -72,4 +72,12 @@ android:layout_centerHorizontal="true" android:layout_below="@+id/resolver_empty_state_subtitle" android:indeterminateTint="?attr/colorAccent"/> <TextView android:id="@+id/empty" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorBackgroundFloating" android:text="@string/noApplications" android:padding="@dimen/chooser_edge_margin_normal" android:layout_marginBottom="56dp" android:gravity="center"/> </RelativeLayout> No newline at end of file Loading
core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +49 −14 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { mInjector = injector; } protected boolean isQuietModeEnabled(UserHandle workProfileUserHandle) { return mInjector.isQuietModeEnabled(workProfileUserHandle); } void setOnProfileSelectedListener(OnProfileSelectedListener listener) { mOnProfileSelectedListener = listener; } Loading Loading @@ -339,23 +343,32 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { protected abstract void showNoPersonalToWorkIntentsEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoPersonalAppsAvailableEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoWorkAppsAvailableEmptyState( ResolverListAdapter activeListAdapter); protected abstract void showNoWorkToPersonalIntentsEmptyState( ResolverListAdapter activeListAdapter); void showEmptyState(ResolverListAdapter listAdapter) { void showNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) { UserHandle listUserHandle = listAdapter.getUserHandle(); if (UserHandle.myUserId() == listUserHandle.getIdentifier() || !hasAppsInOtherProfile(listAdapter)) { if (mWorkProfileUserHandle != null) { if (mWorkProfileUserHandle != null && (UserHandle.myUserId() == listUserHandle.getIdentifier() || !hasAppsInOtherProfile(listAdapter))) { DevicePolicyEventLogger.createEvent( DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_APPS_RESOLVED) .setStrings(getMetricsCategory()) .setBoolean(/*isPersonalProfile*/ listUserHandle == mPersonalProfileUserHandle) .write(); if (listUserHandle == mPersonalProfileUserHandle) { showNoPersonalAppsAvailableEmptyState(listAdapter); } else { showNoWorkAppsAvailableEmptyState(listAdapter); } showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_apps_available, /* subtitleRes */ 0); } else if (mWorkProfileUserHandle == null) { showConsumerUserNoAppsAvailableEmptyState(listAdapter); } } Loading @@ -371,7 +384,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { userHandleToPageIndex(activeListAdapter.getUserHandle())); descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE); View emptyStateView = descriptor.getEmptyStateView(); resetViewVisibilities(emptyStateView); resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon); Loading @@ -395,6 +408,17 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { activeListAdapter.markTabLoaded(); } private void showConsumerUserNoAppsAvailableEmptyState(ResolverListAdapter activeListAdapter) { ProfileDescriptor descriptor = getItem( userHandleToPageIndex(activeListAdapter.getUserHandle())); descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE); View emptyStateView = descriptor.getEmptyStateView(); resetViewVisibilitiesForConsumerUserEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); activeListAdapter.markTabLoaded(); } private void showSpinner(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.INVISIBLE); Loading @@ -402,14 +426,25 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { .setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.empty).setVisibility(View.GONE); } private void resetViewVisibilities(View emptyStateView) { private void resetViewVisibilitiesForWorkProfileEmptyState(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.VISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.GONE); emptyStateView.findViewById(R.id.empty).setVisibility(View.GONE); } private void resetViewVisibilitiesForConsumerUserEmptyState(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.GONE); emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.GONE); emptyStateView.findViewById(R.id.empty).setVisibility(View.VISIBLE); } protected void showListView(ResolverListAdapter activeListAdapter) { Loading
core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java +19 −3 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd View.OnClickListener listener) { showEmptyState(activeListAdapter, R.drawable.ic_work_apps_off, R.string.resolver_turn_on_work_apps_share, R.string.resolver_turn_on_work_apps, /* subtitleRes */ 0, listener); } Loading @@ -185,7 +185,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd showEmptyState(activeListAdapter, R.drawable.ic_sharing_disabled, R.string.resolver_cant_share_with_work_apps, R.string.resolver_cant_share_cross_profile_explanation); R.string.resolver_cant_share_with_work_apps_explanation); } @Override Loading @@ -193,7 +193,23 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd showEmptyState(activeListAdapter, R.drawable.ic_sharing_disabled, R.string.resolver_cant_share_with_personal_apps, R.string.resolver_cant_share_cross_profile_explanation); R.string.resolver_cant_share_with_personal_apps_explanation); } @Override protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_personal_apps_available_share, /* subtitleRes */ 0); } @Override protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_work_apps_available_share, /* subtitleRes */ 0); } class ChooserProfileDescriptor extends ProfileDescriptor { Loading
core/java/com/android/internal/app/ResolverActivity.java +6 −8 Original line number Diff line number Diff line Loading @@ -752,6 +752,11 @@ public class ResolverActivity extends Activity implements } mRegistered = true; } if (shouldShowTabs() && mMultiProfilePagerAdapter.isWaitingToEnableWorkProfile()) { if (mMultiProfilePagerAdapter.isQuietModeEnabled(getWorkProfileUserHandle())) { mMultiProfilePagerAdapter.markWorkProfileEnabledBroadcastReceived(); } } mMultiProfilePagerAdapter.getActiveListAdapter().handlePackagesChanged(); updateProfileViewButton(); } Loading Loading @@ -990,7 +995,7 @@ public class ResolverActivity extends Activity implements return; } if (shouldShowEmptyState(listAdapter)) { mMultiProfilePagerAdapter.showEmptyState(listAdapter); mMultiProfilePagerAdapter.showNoAppsAvailableEmptyState(listAdapter); } else { mMultiProfilePagerAdapter.showListView(listAdapter); } Loading Loading @@ -1603,8 +1608,6 @@ public class ResolverActivity extends Activity implements } private void resetTabsHeaderStyle(TabWidget tabWidget) { String workContentDescription = getString(R.string.resolver_work_tab_accessibility); String personalContentDescription = getString(R.string.resolver_personal_tab_accessibility); for (int i = 0; i < tabWidget.getChildCount(); i++) { View tabView = tabWidget.getChildAt(i); TextView title = tabView.findViewById(android.R.id.title); Loading @@ -1612,11 +1615,6 @@ public class ResolverActivity extends Activity implements title.setTextColor(getAttrColor(this, android.R.attr.textColorTertiary)); title.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.resolver_tab_text_size)); if (title.getText().equals(getString(R.string.resolver_personal_tab))) { tabView.setContentDescription(personalContentDescription); } else if (title.getText().equals(getString(R.string.resolver_work_tab))) { tabView.setContentDescription(workContentDescription); } } } Loading
core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +17 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA View.OnClickListener listener) { showEmptyState(activeListAdapter, R.drawable.ic_work_apps_off, R.string.resolver_turn_on_work_apps_view, R.string.resolver_turn_on_work_apps, /* subtitleRes */ 0, listener); } Loading @@ -188,6 +188,22 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA R.string.resolver_cant_access_personal_apps_explanation); } @Override protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_personal_apps_available_resolve, /* subtitleRes */ 0); } @Override protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) { showEmptyState(listAdapter, R.drawable.ic_no_apps, R.string.resolver_no_work_apps_available_resolve, /* subtitleRes */ 0); } class ResolverProfileDescriptor extends ProfileDescriptor { private ResolverListAdapter resolverListAdapter; final ListView listView; Loading
core/res/res/layout/resolver_empty_states.xml +9 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/resolver_empty_state" android:layout_width="match_parent" android:layout_height="@dimen/resolver_empty_state_height" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" android:visibility="gone" Loading Loading @@ -72,4 +72,12 @@ android:layout_centerHorizontal="true" android:layout_below="@+id/resolver_empty_state_subtitle" android:indeterminateTint="?attr/colorAccent"/> <TextView android:id="@+id/empty" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorBackgroundFloating" android:text="@string/noApplications" android:padding="@dimen/chooser_edge_margin_normal" android:layout_marginBottom="56dp" android:gravity="center"/> </RelativeLayout> No newline at end of file