Merge "Use role for App info default SMS shortcut."

This commit is contained in:
TreeHugger Robot
2019-01-15 00:47:40 +00:00
committed by Android (Google) Code Review
4 changed files with 160 additions and 119 deletions

View File

@@ -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;
}
}

View File

@@ -14,27 +14,15 @@
package com.android.settings.applications.appinfo;
import android.app.role.RoleManager;
import android.content.Context;
import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
public class DefaultSmsShortcutPreferenceController
extends DefaultAppShortcutPreferenceControllerBase {
private static final String KEY = "default_sms_app";
public DefaultSmsShortcutPreferenceController(Context context, String packageName) {
super(context, KEY, packageName);
super(context, KEY, RoleManager.ROLE_SMS, packageName);
}
@Override
protected boolean hasAppCapability() {
return DefaultSmsPreferenceController.hasSmsPreference(mPackageName, mContext);
}
@Override
protected boolean isDefaultApp() {
return DefaultSmsPreferenceController.isSmsDefault(mPackageName, mContext);
}
}