diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
index ec2653fe67b29..a8155928dacc6 100644
--- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
@@ -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;
}
@@ -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) {
- DevicePolicyEventLogger.createEvent(
- DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_APPS_RESOLVED)
- .setStrings(getMetricsCategory())
- .write();
+ 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);
}
}
@@ -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);
@@ -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);
@@ -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) {
diff --git a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
index c6a00f3e46b4a..57157f7b1f5b2 100644
--- a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
@@ -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);
}
@@ -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
@@ -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 {
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 8e64b970441a1..d14203381c656 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -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();
}
@@ -990,7 +995,7 @@ public class ResolverActivity extends Activity implements
return;
}
if (shouldShowEmptyState(listAdapter)) {
- mMultiProfilePagerAdapter.showEmptyState(listAdapter);
+ mMultiProfilePagerAdapter.showNoAppsAvailableEmptyState(listAdapter);
} else {
mMultiProfilePagerAdapter.showListView(listAdapter);
}
@@ -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);
@@ -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);
- }
}
}
diff --git a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
index 578f6ae63ff11..b690a18f2d0ea 100644
--- a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
@@ -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);
}
@@ -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;
diff --git a/core/res/res/layout/resolver_empty_states.xml b/core/res/res/layout/resolver_empty_states.xml
index 5fdf190421996..67299e837e8dd 100644
--- a/core/res/res/layout/resolver_empty_states.xml
+++ b/core/res/res/layout/resolver_empty_states.xml
@@ -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"
@@ -72,4 +72,12 @@
android:layout_centerHorizontal="true"
android:layout_below="@+id/resolver_empty_state_subtitle"
android:indeterminateTint="?attr/colorAccent"/>
+
\ No newline at end of file
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2040bed248279..ddee2e9ab33d8 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -5402,33 +5402,42 @@
Personal
Work
-
- Personal view
-
- Work view
-
- Can\u2019t share with work apps
-
- Can\u2019t share with personal apps
-
- Your IT admin blocked sharing between personal and work profiles
-
- Can\u2019t access work apps
-
- Your IT admin doesn\u2019t let you view personal content in work apps
-
- Can\u2019t access personal apps
-
- Your IT admin doesn\u2019t let you view work content in personal apps
-
- Turn on work profile to share content
-
- Turn on work profile to view content
-
- No apps available
+
+
+ Can\u2019t share this with work apps
+
+ Your IT admin doesn\u2019t allow you to share this content with apps in your work profile
+
+
+ Can\u2019t open this with work apps
+
+ Your IT admin doesn\u2019t allow you to open this content with apps in your work profile
+
+
+ Can\u2019t share this with personal apps
+
+ Your IT admin doesn\u2019t allow you to share this content with apps in your personal profile
+
+
+ Can\u2019t open this with personal apps
+
+ Your IT admin doesn\u2019t allow you to open this content with apps in your personal profile
+
+
+ Work profile is paused
Turn on
+
+ No work apps can support this content
+
+ No work apps can open this content
+
+
+ No personal apps can support this content
+
+ No personal apps can open this content
+
Record or play audio in telephony calls
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 4ac04501c754e..936e85961845a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3886,9 +3886,7 @@
-
-
@@ -3898,15 +3896,18 @@
+
-
+
-
-
-
+
+
+
+
+
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
index a6cbc1ae466d6..e427421a5a80e 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -1343,7 +1343,7 @@ public class ChooserActivityTest {
onView(withText(R.string.resolver_work_tab)).perform(click());
waitForIdle();
- onView(withText(R.string.resolver_turn_on_work_apps_share))
+ onView(withText(R.string.resolver_turn_on_work_apps))
.check(matches(isDisplayed()));
}
@@ -1368,7 +1368,7 @@ public class ChooserActivityTest {
onView(withText(R.string.resolver_work_tab)).perform(click());
waitForIdle();
- onView(withText(R.string.resolver_no_apps_available))
+ onView(withText(R.string.resolver_no_work_apps_available_share))
.check(matches(isDisplayed()));
}
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
index 9d1ca615e54b6..4ec89b7d28177 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
@@ -624,7 +624,7 @@ public class ResolverActivityTest {
onView(withText(R.string.resolver_work_tab)).perform(click());
waitForIdle();
- onView(withText(R.string.resolver_turn_on_work_apps_view))
+ onView(withText(R.string.resolver_turn_on_work_apps))
.check(matches(isDisplayed()));
}
@@ -648,7 +648,7 @@ public class ResolverActivityTest {
onView(withText(R.string.resolver_work_tab)).perform(click());
waitForIdle();
- onView(withText(R.string.resolver_no_apps_available))
+ onView(withText(R.string.resolver_no_work_apps_available_resolve))
.check(matches(isDisplayed()));
}