summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/AppPicker.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-02-14 13:25:41 -0800
committerDianne Hackborn <hackbod@google.com>2012-02-14 13:46:27 -0800
commit9244df4c6422931697a0cf6e327b15cd71b6d8c4 (patch)
tree7ed5a0462b6086e0d86d62bf5965cd43b9c64832 /src/com/android/settings/AppPicker.java
parent31c5ec82021271f2e1745a2de37c543e67dcec17 (diff)
downloadpackages_apps_Settings-9244df4c6422931697a0cf6e327b15cd71b6d8c4.zip
packages_apps_Settings-9244df4c6422931697a0cf6e327b15cd71b6d8c4.tar.gz
packages_apps_Settings-9244df4c6422931697a0cf6e327b15cd71b6d8c4.tar.bz2
Add debug app / wait for debugger dev options.
Re-organize dev options a bit. Change-Id: I291b177c87cb8fb4bd8316d05aa6eadfaaf5f0d2
Diffstat (limited to 'src/com/android/settings/AppPicker.java')
-rw-r--r--src/com/android/settings/AppPicker.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/com/android/settings/AppPicker.java b/src/com/android/settings/AppPicker.java
new file mode 100644
index 0000000..e58b835
--- /dev/null
+++ b/src/com/android/settings/AppPicker.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2008 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;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import com.android.settings.applications.AppViewHolder;
+
+import android.app.ActivityManagerNative;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Process;
+import android.os.RemoteException;
+import android.provider.Settings;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+public class AppPicker extends ListActivity {
+ private AppListAdapter mAdapter;
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ mAdapter = new AppListAdapter(this);
+ if (mAdapter.getCount() <= 0) {
+ finish();
+ } else {
+ setListAdapter(mAdapter);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ }
+
+ @Override
+ protected void onListItemClick(ListView l, View v, int position, long id) {
+ MyApplicationInfo app = mAdapter.getItem(position);
+ Intent intent = new Intent();
+ if (app.info != null) intent.setAction(app.info.packageName);
+ setResult(RESULT_OK, intent);
+ finish();
+ }
+
+ class MyApplicationInfo {
+ ApplicationInfo info;
+ CharSequence label;
+ }
+
+ public class AppListAdapter extends ArrayAdapter<MyApplicationInfo> {
+ private final List<MyApplicationInfo> mPackageInfoList = new ArrayList<MyApplicationInfo>();
+ private final LayoutInflater mInflater;
+
+ public AppListAdapter(Context context) {
+ super(context, 0);
+ mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ List<ApplicationInfo> pkgs = context.getPackageManager().getInstalledApplications(0);
+ for (int i=0; i<pkgs.size(); i++) {
+ ApplicationInfo ai = pkgs.get(i);
+ if (ai.uid == Process.SYSTEM_UID) {
+ continue;
+ }
+ // On a user build, we only allow debugging of apps that
+ // are marked as debuggable. Otherwise (for platform development)
+ // we allow all apps.
+ if ((ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) == 0
+ && "user".equals(Build.TYPE)) {
+ continue;
+ }
+ MyApplicationInfo info = new MyApplicationInfo();
+ info.info = ai;
+ info.label = info.info.loadLabel(getPackageManager()).toString();
+ mPackageInfoList.add(info);
+ }
+ Collections.sort(mPackageInfoList, sDisplayNameComparator);
+ MyApplicationInfo info = new MyApplicationInfo();
+ info.label = context.getText(R.string.no_application);
+ mPackageInfoList.add(0, info);
+ addAll(mPackageInfoList);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ // A ViewHolder keeps references to children views to avoid unnecessary calls
+ // to findViewById() on each row.
+ AppViewHolder holder = AppViewHolder.createOrRecycle(mInflater, convertView);
+ convertView = holder.rootView;
+ MyApplicationInfo info = getItem(position);
+ holder.appName.setText(info.label);
+ if (info.info != null) {
+ holder.appIcon.setImageDrawable(info.info.loadIcon(getPackageManager()));
+ holder.appSize.setText(info.info.packageName);
+ } else {
+ holder.appIcon.setImageDrawable(null);
+ holder.appSize.setText("");
+ }
+ holder.disabled.setVisibility(View.GONE);
+ holder.checkBox.setVisibility(View.GONE);
+ return convertView;
+ }
+ }
+
+ private final static Comparator<MyApplicationInfo> sDisplayNameComparator
+ = new Comparator<MyApplicationInfo>() {
+ public final int
+ compare(MyApplicationInfo a, MyApplicationInfo b) {
+ return collator.compare(a.label, b.label);
+ }
+
+ private final Collator collator = Collator.getInstance();
+ };
+}