Use role for App info default SMS shortcut.
This change makes the default SMS shortcut in App info launch the new default app UI based on roles, since we've migrated default SMS mechanism. Bug: 110557011 Test: atest DefaultAppShortcutPreferenceControllerBaseTest && atest DefaultSmsShortcutPreferenceControllerTest Change-Id: I074e41433fe912309082f1e9c54bf74200297dd1
This commit is contained in:
@@ -14,7 +14,9 @@
|
||||
|
||||
package com.android.settings.applications.appinfo;
|
||||
|
||||
import android.app.role.RoleManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserManager;
|
||||
import android.text.TextUtils;
|
||||
@@ -22,6 +24,7 @@ import android.text.TextUtils;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.internal.util.CollectionUtils;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.applications.DefaultAppSettings;
|
||||
@@ -34,17 +37,31 @@ import com.android.settings.core.SubSettingLauncher;
|
||||
*/
|
||||
public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePreferenceController {
|
||||
|
||||
private final String mRoleName;
|
||||
|
||||
protected final String mPackageName;
|
||||
|
||||
private final RoleManager mRoleManager;
|
||||
|
||||
public DefaultAppShortcutPreferenceControllerBase(Context context, String preferenceKey,
|
||||
String roleName, String packageName) {
|
||||
super(context, preferenceKey);
|
||||
|
||||
mRoleName = roleName;
|
||||
mPackageName = packageName;
|
||||
|
||||
mRoleManager = context.getSystemService(RoleManager.class);
|
||||
}
|
||||
|
||||
// TODO: STOPSHIP(b/110557011): Remove this once we have all default apps migrated.
|
||||
public DefaultAppShortcutPreferenceControllerBase(Context context, String preferenceKey,
|
||||
String packageName) {
|
||||
super(context, preferenceKey);
|
||||
mPackageName = packageName;
|
||||
this(context, preferenceKey, null /* roleName */, packageName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
if (UserManager.get(mContext).isManagedProfile()) {
|
||||
if (mContext.getSystemService(UserManager.class).isManagedProfile()) {
|
||||
return DISABLED_FOR_USER;
|
||||
}
|
||||
return hasAppCapability() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||
@@ -52,13 +69,21 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
int summaryResId = isDefaultApp() ? R.string.yes : R.string.no;
|
||||
final int summaryResId = isDefaultApp() ? R.string.yes : R.string.no;
|
||||
return mContext.getText(summaryResId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||
if (TextUtils.equals(mPreferenceKey, preference.getKey())) {
|
||||
if (!TextUtils.equals(mPreferenceKey, preference.getKey())) {
|
||||
return false;
|
||||
}
|
||||
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
|
||||
if (mRoleName != null) {
|
||||
final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
|
||||
.putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
|
||||
mContext.startActivity(intent);
|
||||
} else {
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mPreferenceKey);
|
||||
new SubSettingLauncher(mContext)
|
||||
@@ -67,9 +92,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
|
||||
.setTitleRes(R.string.configure_apps)
|
||||
.setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN)
|
||||
.launch();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,13 +101,26 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
|
||||
*
|
||||
* @return true if the app has the default app capability
|
||||
*/
|
||||
protected abstract boolean hasAppCapability();
|
||||
protected boolean hasAppCapability() {
|
||||
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
|
||||
if (mRoleName != null) {
|
||||
return mRoleManager.isRoleAvailable(mRoleName);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the app is the default app
|
||||
*
|
||||
* @return true if the app is the default app
|
||||
*/
|
||||
protected abstract boolean isDefaultApp();
|
||||
|
||||
protected boolean isDefaultApp() {
|
||||
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
|
||||
if (mRoleName != null) {
|
||||
final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders(
|
||||
mRoleName));
|
||||
return TextUtils.equals(mPackageName, packageName);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user