summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java2
-rw-r--r--src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java18
-rw-r--r--src/com/android/settings/development/SelectDebugAppPreferenceController.java132
3 files changed, 145 insertions, 7 deletions
diff --git a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
index 54d1fa39d2..667ae3115e 100644
--- a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
+++ b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
@@ -21,4 +21,6 @@ package com.android.settings.development;
*/
public interface DevelopmentOptionsActivityRequestCodes {
int REQUEST_CODE_ENABLE_OEM_UNLOCK = 0;
+
+ int REQUEST_CODE_DEBUG_APP = 1;
}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 787ce16c2b..7f99cc2009 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -122,15 +122,19 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ boolean handledResult = false;
for (AbstractPreferenceController controller : mPreferenceControllers) {
if (controller instanceof DeveloperOptionsPreferenceController) {
- if (((DeveloperOptionsPreferenceController) controller).onActivityResult(
- requestCode, resultCode, data)) {
- return;
- }
+ // We do not break early because it is possible for multiple controllers to
+ // handle the same result code.
+ handledResult |=
+ ((DeveloperOptionsPreferenceController) controller).onActivityResult(
+ requestCode, resultCode, data);
}
}
- super.onActivityResult(requestCode, resultCode, data);
+ if (!handledResult) {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
}
@Override
@@ -193,8 +197,8 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
// bug report shortcut
// select mock location app
controllers.add(new DebugViewAttributesPreferenceController(context));
- // select debug app
- // wait for debugger
+ controllers.add(new SelectDebugAppPreferenceController(context, fragment));
+ //controllers.add(new WaitForDebuggerPreferenceController(context));
// verify apps over usb
// logger buffer sizes
// store logger data persistently on device
diff --git a/src/com/android/settings/development/SelectDebugAppPreferenceController.java b/src/com/android/settings/development/SelectDebugAppPreferenceController.java
new file mode 100644
index 0000000000..c1f04f2186
--- /dev/null
+++ b/src/com/android/settings/development/SelectDebugAppPreferenceController.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes
+ .REQUEST_CODE_DEBUG_APP;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
+public class SelectDebugAppPreferenceController extends DeveloperOptionsPreferenceController {
+
+ private static final String DEBUG_APP_KEY = "debug_app";
+
+ private final DevelopmentSettingsDashboardFragment mFragment;
+ private final PackageManagerWrapper mPackageManager;
+
+ private Preference mPreference;
+
+ public SelectDebugAppPreferenceController(Context context,
+ DevelopmentSettingsDashboardFragment fragment) {
+ super(context);
+ mFragment = fragment;
+ mPackageManager = new PackageManagerWrapper(mContext.getPackageManager());
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return DEBUG_APP_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (DEBUG_APP_KEY.equals(preference.getKey())) {
+ final Intent intent = getActivityStartIntent();
+ intent.putExtra(AppPicker.EXTRA_DEBUGGABLE, true /* value */);
+ mFragment.startActivityForResult(intent, REQUEST_CODE_DEBUG_APP);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updatePreferenceSummary();
+ }
+
+ @Override
+ public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode != REQUEST_CODE_DEBUG_APP || resultCode != Activity.RESULT_OK) {
+ return false;
+ }
+ Settings.Global.putString(mContext.getContentResolver(), Settings.Global.DEBUG_APP,
+ data.getAction());
+ updatePreferenceSummary();
+ return true;
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ mPreference.setSummary(mContext.getResources().getString(R.string.debug_app_not_set));
+ }
+
+ @VisibleForTesting
+ Intent getActivityStartIntent() {
+ return new Intent(mContext, AppPicker.class);
+ }
+
+ private void updatePreferenceSummary() {
+ final String debugApp = Settings.Global.getString(
+ mContext.getContentResolver(), Settings.Global.DEBUG_APP);
+ if (debugApp != null && debugApp.length() > 0) {
+ mPreference.setSummary(mContext.getResources().getString(R.string.debug_app_set,
+ getAppLabel(debugApp)));
+ } else {
+ mPreference.setSummary(mContext.getResources().getString(R.string.debug_app_not_set));
+ }
+ }
+
+ private String getAppLabel(String debugApp) {
+ try {
+ final ApplicationInfo ai = mPackageManager.getApplicationInfo(debugApp,
+ PackageManager.GET_DISABLED_COMPONENTS);
+ final CharSequence lab = mPackageManager.getApplicationLabel(ai);
+ return lab != null ? lab.toString() : debugApp;
+ } catch (PackageManager.NameNotFoundException e) {
+ return debugApp;
+ }
+ }
+}