SetupWizard: Fix AccessibilityController regression and service leak

Change-Id: Ic8e419792d2468b937feb08d6678608c936d9f98
This commit is contained in:
cretin45 2015-02-04 14:00:52 -08:00
parent c117b980c4
commit 508cfbb0f3
4 changed files with 22 additions and 14 deletions

View File

@ -23,8 +23,7 @@
<LinearLayout android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true">
android:layout_height="match_parent">
<FrameLayout android:id="@+id/content"
android:layout_width="match_parent"

View File

@ -88,7 +88,8 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks
mSetupData.load(savedInstanceState.getBundle("data"));
}
if (EnableAccessibilityController.canEnableAccessibilityViaGesture(this)) {
mEnableAccessibilityController = new EnableAccessibilityController(this);
mEnableAccessibilityController =
EnableAccessibilityController.getInstance(getApplicationContext());
mRootView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
@ -119,9 +120,6 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks
@Override
protected void onDestroy() {
super.onDestroy();
if (mEnableAccessibilityController != null) {
mEnableAccessibilityController.onDestroy();
}
mSetupData.unregisterListener(this);
unregisterReceiver(mSetupData);
}
@ -273,7 +271,10 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
((SetupWizardApp)AppGlobals.getInitialApplication()).enableStatusBar();
SetupWizardUtils.disableSetupWizards(this);
finish();
if (mEnableAccessibilityController != null) {
mEnableAccessibilityController.onDestroy();
}
SetupWizardUtils.disableSetupWizards(this);
}
}

View File

@ -97,7 +97,9 @@ public class EnableAccessibilityController {
private float mSecondPointerDownX;
private float mSecondPointerDownY;
public EnableAccessibilityController(Context context) {
private static EnableAccessibilityController sInstance;
private EnableAccessibilityController(Context context) {
mContext = context;
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
mTts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
@ -114,6 +116,13 @@ public class EnableAccessibilityController {
R.dimen.accessibility_touch_slop);
}
public static EnableAccessibilityController getInstance(Context context) {
if (sInstance == null) {
sInstance = new EnableAccessibilityController(context);
}
return sInstance;
}
public static boolean canEnableAccessibilityViaGesture(Context context) {
AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(context);
// Accessibility is enabled and there is an enabled speaking
@ -123,11 +132,10 @@ public class EnableAccessibilityController {
AccessibilityServiceInfo.FEEDBACK_SPOKEN).isEmpty()) {
return false;
}
// If the global gesture is enabled and there is a speaking service
// If there is a speaking service
// installed we are good to go, otherwise there is nothing to do.
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1
&& !getInstalledSpeakingAccessibilityServices(context).isEmpty();
return getInstalledSpeakingAccessibilityServices(context).isEmpty();
}
private static List<AccessibilityServiceInfo> getInstalledSpeakingAccessibilityServices(

View File

@ -162,11 +162,11 @@ public class SetupWizardUtils {
new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
0);
}
}
pm.setComponentEnabledSetting(context.getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
}