From 924506e1317c8f3b42341816f6002d51418973ef Mon Sep 17 00:00:00 2001 From: menghanli Date: Mon, 3 May 2021 20:11:59 +0800 Subject: [PATCH] Fix Sound Amplifier does not have 'Open XXX' button SettingsMainSwitchPreference does not allow hide switch bar. For support this launch preference, we hide the SettingsMainSwitchPreference and add new preference into the list. Bug: 184711985 Test: Manual testing Change-Id: I293800e83aafb387e0bb0a4988af774b56f508e6 --- ...cessibilityActivityPreferenceFragment.java | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index 4db7857786f..fe08d6b5bde 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -30,34 +30,41 @@ import android.os.Bundle; import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; import androidx.annotation.Nullable; +import androidx.preference.Preference; import com.android.settings.R; -import com.android.settings.widget.SettingsMainSwitchPreference; +import java.util.ArrayList; import java.util.List; /** Fragment for providing open activity button. */ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeaturePreferenceFragment { private static final String TAG = "LaunchA11yActivity"; private static final String EMPTY_STRING = ""; + protected static final String KEY_LAUNCH_PREFERENCE = "launch_preference"; @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + final View view = super.onCreateView(inflater, container, savedInstanceState); - mToggleServiceSwitchPreference.hide(); - } + // Init new preference to replace the switch preference instead. + initLaunchPreference(); + removePreference(KEY_USE_SERVICE_PREFERENCE); + return view; + }; @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { - logAccessibilityServiceEnabled(mComponentName, enabled); - launchShortcutTargetActivity(getPrefContext().getDisplayId(), mComponentName); + // Do nothing. } @Override @@ -99,16 +106,6 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature // accessibility service from this page. } - @Override - protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) { - final AccessibilityShortcutInfo info = getAccessibilityShortcutInfo(); - final String switchBarText = (info == null) ? EMPTY_STRING : getString( - R.string.accessibility_service_primary_open_title, - info.getActivityInfo().loadLabel(getPackageManager())); - - switchPreference.setTitle(switchBarText); - } - // IMPORTANT: Refresh the info since there are dynamically changing capabilities. private AccessibilityShortcutInfo getAccessibilityShortcutInfo() { final List infos = AccessibilityManager.getInstance( @@ -126,6 +123,34 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature return null; } + /** Customizes the order by preference key. */ + protected List getPreferenceOrderList() { + final List lists = new ArrayList<>(); + lists.add(KEY_ANIMATED_IMAGE); + lists.add(KEY_LAUNCH_PREFERENCE); + lists.add(KEY_GENERAL_CATEGORY); + lists.add(KEY_HTML_DESCRIPTION_PREFERENCE); + return lists; + } + + private void initLaunchPreference() { + final Preference launchPreference = new Preference(getPrefContext()); + launchPreference.setKey(KEY_LAUNCH_PREFERENCE); + + final AccessibilityShortcutInfo info = getAccessibilityShortcutInfo(); + final String switchBarText = (info == null) ? EMPTY_STRING : getString( + R.string.accessibility_service_primary_open_title, + info.getActivityInfo().loadLabel(getPackageManager())); + launchPreference.setTitle(switchBarText); + + launchPreference.setOnPreferenceClickListener(preference -> { + logAccessibilityServiceEnabled(mComponentName, /* enabled= */ true); + launchShortcutTargetActivity(getPrefContext().getDisplayId(), mComponentName); + return true; + }); + getPreferenceScreen().addPreference(launchPreference); + } + private void launchShortcutTargetActivity(int displayId, ComponentName name) { final Intent intent = new Intent(); final Bundle bundle = ActivityOptions.makeBasic().setLaunchDisplayId(displayId).toBundle();