diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
index bcf731d993df8..18d77386d063b 100644
--- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
@@ -299,11 +299,8 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
.createEvent(DevicePolicyEnums.RESOLVER_EMPTY_STATE_WORK_APPS_DISABLED)
.setStrings(getMetricsCategory())
.write();
- showEmptyState(activeListAdapter,
- R.drawable.ic_work_apps_off,
- R.string.resolver_turn_on_work_apps,
- R.string.resolver_turn_on_work_apps_explanation,
- (View.OnClickListener) v -> {
+ showWorkProfileOffEmptyState(activeListAdapter,
+ v -> {
ProfileDescriptor descriptor = getItem(
userHandleToPageIndex(activeListAdapter.getUserHandle()));
showSpinner(descriptor.getEmptyStateView());
@@ -319,19 +316,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_PERSONAL)
.setStrings(getMetricsCategory())
.write();
- showEmptyState(activeListAdapter,
- R.drawable.ic_sharing_disabled,
- R.string.resolver_cant_share_with_personal_apps,
- R.string.resolver_cant_share_cross_profile_explanation);
+ showNoWorkToPersonalIntentsEmptyState(activeListAdapter);
} else {
DevicePolicyEventLogger.createEvent(
DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_WORK)
.setStrings(getMetricsCategory())
.write();
- showEmptyState(activeListAdapter,
- R.drawable.ic_sharing_disabled,
- R.string.resolver_cant_share_with_work_apps,
- R.string.resolver_cant_share_cross_profile_explanation);
+ showNoPersonalToWorkIntentsEmptyState(activeListAdapter);
}
return false;
}
@@ -340,6 +331,15 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
return activeListAdapter.rebuildList(doPostProcessing);
}
+ protected abstract void showWorkProfileOffEmptyState(
+ ResolverListAdapter activeListAdapter, View.OnClickListener listener);
+
+ protected abstract void showNoPersonalToWorkIntentsEmptyState(
+ ResolverListAdapter activeListAdapter);
+
+ protected abstract void showNoWorkToPersonalIntentsEmptyState(
+ ResolverListAdapter activeListAdapter);
+
void showEmptyState(ResolverListAdapter listAdapter) {
UserHandle listUserHandle = listAdapter.getUserHandle();
if (UserHandle.myUserId() == listUserHandle.getIdentifier()
@@ -353,16 +353,16 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
showEmptyState(listAdapter,
R.drawable.ic_no_apps,
R.string.resolver_no_apps_available,
- R.string.resolver_no_apps_available_explanation);
+ /* subtitleRes */ 0);
}
}
- private void showEmptyState(ResolverListAdapter activeListAdapter,
+ protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes) {
showEmptyState(activeListAdapter, iconRes, titleRes, subtitleRes, /* buttonOnClick */ null);
}
- private void showEmptyState(ResolverListAdapter activeListAdapter,
+ protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes,
View.OnClickListener buttonOnClick) {
ProfileDescriptor descriptor = getItem(
@@ -379,7 +379,12 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
title.setText(titleRes);
TextView subtitle = emptyStateView.findViewById(R.id.resolver_empty_state_subtitle);
- subtitle.setText(subtitleRes);
+ if (subtitleRes != 0) {
+ subtitle.setVisibility(View.VISIBLE);
+ subtitle.setText(subtitleRes);
+ } else {
+ subtitle.setVisibility(View.GONE);
+ }
Button button = emptyStateView.findViewById(R.id.resolver_empty_state_button);
button.setVisibility(buttonOnClick != null ? View.VISIBLE : View.GONE);
diff --git a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
index b39d42ec1e96e..2167b1ebd4738 100644
--- a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
@@ -20,6 +20,7 @@ import android.annotation.Nullable;
import android.content.Context;
import android.os.UserHandle;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import com.android.internal.R;
@@ -169,6 +170,32 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd
return ResolverActivity.METRICS_CATEGORY_CHOOSER;
}
+ @Override
+ protected void showWorkProfileOffEmptyState(ResolverListAdapter activeListAdapter,
+ View.OnClickListener listener) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_work_apps_off,
+ R.string.resolver_turn_on_work_apps_share,
+ /* subtitleRes */ 0,
+ listener);
+ }
+
+ @Override
+ protected void showNoPersonalToWorkIntentsEmptyState(ResolverListAdapter activeListAdapter) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_sharing_disabled,
+ R.string.resolver_cant_share_with_work_apps,
+ R.string.resolver_cant_share_cross_profile_explanation);
+ }
+
+ @Override
+ protected void showNoWorkToPersonalIntentsEmptyState(ResolverListAdapter activeListAdapter) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_sharing_disabled,
+ R.string.resolver_cant_share_with_personal_apps,
+ R.string.resolver_cant_share_cross_profile_explanation);
+ }
+
class ChooserProfileDescriptor extends ProfileDescriptor {
private ChooserActivity.ChooserGridAdapter chooserGridAdapter;
private RecyclerView recyclerView;
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 6ab61850480d1..bd7b47d853d29 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -1595,9 +1595,17 @@ 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++) {
- TextView title = tabWidget.getChildAt(i).findViewById(android.R.id.title);
+ View tabView = tabWidget.getChildAt(i);
+ TextView title = tabView.findViewById(android.R.id.title);
title.setTextColor(getColor(R.color.resolver_tabs_inactive_color));
+ 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 f6382d397d6f3..0440f5e92ce48 100644
--- a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
@@ -20,6 +20,7 @@ import android.annotation.Nullable;
import android.content.Context;
import android.os.UserHandle;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
@@ -161,6 +162,32 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
return ResolverActivity.METRICS_CATEGORY_RESOLVER;
}
+ @Override
+ protected void showWorkProfileOffEmptyState(ResolverListAdapter activeListAdapter,
+ View.OnClickListener listener) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_work_apps_off,
+ R.string.resolver_turn_on_work_apps_view,
+ /* subtitleRes */ 0,
+ listener);
+ }
+
+ @Override
+ protected void showNoPersonalToWorkIntentsEmptyState(ResolverListAdapter activeListAdapter) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_sharing_disabled,
+ R.string.resolver_cant_access_work_apps,
+ R.string.resolver_cant_access_work_apps_explanation);
+ }
+
+ @Override
+ protected void showNoWorkToPersonalIntentsEmptyState(ResolverListAdapter activeListAdapter) {
+ showEmptyState(activeListAdapter,
+ R.drawable.ic_sharing_disabled,
+ R.string.resolver_cant_access_personal_apps,
+ R.string.resolver_cant_access_personal_apps_explanation);
+ }
+
class ResolverProfileDescriptor extends ProfileDescriptor {
private ResolverListAdapter resolverListAdapter;
final ListView listView;
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2356b1737acd1..addcd81ae5c89 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -5385,26 +5385,36 @@
%1$s has been put into the RESTRICTED bucket
-
+
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 apps
-
- Turn on work apps
-
- Turn on work apps to access work apps & contacts
-
+
+ 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
-
- We couldn\u2019t find any apps
-
- Switch on work
+
+ Turn on
Record or play audio in telephony calls
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index c1d8168e62871..0971aadfe4ab8 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3874,7 +3874,9 @@
+
+
@@ -3886,11 +3888,13 @@
-
-
+
+
+
+
+
+
-
-
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 6d0e58bc89be7..24e96d4b8463c 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -1340,7 +1340,7 @@ public class ChooserActivityTest {
onView(withText(R.string.resolver_work_tab)).perform(click());
waitForIdle();
- onView(withText(R.string.resolver_turn_on_work_apps))
+ onView(withText(R.string.resolver_turn_on_work_apps_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 a7bf48858e42d..9d1ca615e54b6 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))
+ onView(withText(R.string.resolver_turn_on_work_apps_view))
.check(matches(isDisplayed()));
}