From 5bc6141cb29913d344b4a7881956af8b5074f560 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Tue, 29 Sep 2009 00:03:59 -0700 Subject: [PATCH] Add development setting for compatibility mode. Also some cleanup here and there. Change-Id: Iebf563cf6ec2d0b1671a54bd534336e8fef4b9c0 --- .../res/layout/development_settings.xml | 9 +- apps/Development/res/layout/package_list_item.xml | 68 +++++++++++++ apps/Development/res/values/strings.xml | 3 + .../src/com/android/development/AppPicker.java | 110 ++++++++------------- .../android/development/DevelopmentSettings.java | 32 +++++- .../com/android/development/PackageBrowser.java | 78 +++++++++------ .../com/android/development/PackageSummary.java | 5 +- 7 files changed, 206 insertions(+), 99 deletions(-) create mode 100644 apps/Development/res/layout/package_list_item.xml diff --git a/apps/Development/res/layout/development_settings.xml b/apps/Development/res/layout/development_settings.xml index 4f185aae..7bad3bb4 100644 --- a/apps/Development/res/layout/development_settings.xml +++ b/apps/Development/res/layout/development_settings.xml @@ -68,10 +68,17 @@ android:layout_alignParentLeft="true" android:text="@string/development_settings_show_updates_text" /> + + + + + + + + + + + + + + + + diff --git a/apps/Development/res/values/strings.xml b/apps/Development/res/values/strings.xml index 21f15f6a..ad70fbed 100644 --- a/apps/Development/res/values/strings.xml +++ b/apps/Development/res/values/strings.xml @@ -77,6 +77,9 @@ Immediately destroy activities Show running processes Show screen updates + Disable compatibility mode + Reboot required for + change to take effect. Enable OpenGL ES (reboot needed) Allow mock locations for testing Wait for debugger diff --git a/apps/Development/src/com/android/development/AppPicker.java b/apps/Development/src/com/android/development/AppPicker.java index 693defbf..28040c26 100644 --- a/apps/Development/src/com/android/development/AppPicker.java +++ b/apps/Development/src/com/android/development/AppPicker.java @@ -17,11 +17,14 @@ package com.android.development; +import com.android.development.PackageBrowser.MyPackageInfo; + import android.app.ActivityManagerNative; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.os.Bundle; import android.os.RemoteException; import android.provider.Settings; @@ -29,10 +32,12 @@ import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; import android.widget.BaseAdapter; +import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.text.Collator; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -67,96 +72,67 @@ public class AppPicker extends ListActivity @Override protected void onListItemClick(ListView l, View v, int position, long id) { - ApplicationInfo app = mAdapter.appForPosition(position); + MyApplicationInfo app = mAdapter.itemForPosition(position); Intent intent = new Intent(); - if (app != null) intent.setAction(app.packageName); + if (app.info != null) intent.setAction(app.info.packageName); setResult(RESULT_OK, intent); - /* This is a temporary fix for 824637 while it is blocked by 805226. When 805226 is resolved, please remove this. */ try { boolean waitForDebugger = Settings.System.getInt( getContentResolver(), Settings.System.WAIT_FOR_DEBUGGER, 0) != 0; ActivityManagerNative.getDefault().setDebugApp( - app != null ? app.packageName : null, waitForDebugger, true); + app.info != null ? app.info.packageName : null, waitForDebugger, true); } catch (RemoteException ex) { } finish(); } - private final class AppListAdapter extends BaseAdapter - { - public AppListAdapter(Context context) - { - mContext = context; - mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - mList = context.getPackageManager().getInstalledApplications(0); - if (mList != null) { - Collections.sort(mList, sDisplayNameComparator); - mList.add(0, null); - } - } + class MyApplicationInfo { + ApplicationInfo info; + String label; + } - public ApplicationInfo appForPosition(int position) - { - if (mList == null) { - return null; + public class AppListAdapter extends ArrayAdapter { + private List mPackageInfoList = new ArrayList(); + + public AppListAdapter(Context context) { + super(context, R.layout.package_list_item); + List pkgs = context.getPackageManager().getInstalledApplications(0); + for (int i=0; i mList; - } - private final static Comparator sDisplayNameComparator = new Comparator() { + private final static Comparator sDisplayNameComparator + = new Comparator() { public final int - compare(Object a, Object b) - { - CharSequence sa = ((ApplicationInfo) a).packageName; - CharSequence sb = ((ApplicationInfo) b).packageName; - - return collator.compare(sa, sb); + compare(MyApplicationInfo a, MyApplicationInfo b) { + return collator.compare(a.label, b.label); } private final Collator collator = Collator.getInstance(); diff --git a/apps/Development/src/com/android/development/DevelopmentSettings.java b/apps/Development/src/com/android/development/DevelopmentSettings.java index 3b4848a4..9cb6fc63 100644 --- a/apps/Development/src/com/android/development/DevelopmentSettings.java +++ b/apps/Development/src/com/android/development/DevelopmentSettings.java @@ -38,6 +38,7 @@ import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.Spinner; +import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; import java.io.FileInputStream; @@ -58,6 +59,7 @@ public class DevelopmentSettings extends Activity { private CheckBox mShowBackgroundCB; private CheckBox mShowSleepCB; private CheckBox mShowXmppCB; + private CheckBox mCompatibilityModeCB; private Spinner mMaxProcsSpinner; private Spinner mWindowAnimationScaleSpinner; private Spinner mTransitionAnimationScaleSpinner; @@ -69,6 +71,7 @@ public class DevelopmentSettings extends Activity { private int mProcessLimit; private boolean mShowSleep; private boolean mShowXmpp; + private boolean mCompatibilityMode; private AnimationScaleSelectedListener mWindowAnimationScale = new AnimationScaleSelectedListener(0); private AnimationScaleSelectedListener mTransitionAnimationScale @@ -106,6 +109,8 @@ public class DevelopmentSettings extends Activity { mShowSleepCB.setOnClickListener(mShowSleepClicked); mShowXmppCB = (CheckBox)findViewById(R.id.show_xmpp); mShowXmppCB.setOnClickListener(mShowXmppClicked); + mCompatibilityModeCB = (CheckBox)findViewById(R.id.compatibility_mode); + mCompatibilityModeCB.setOnClickListener(mCompatibilityModeClicked); mMaxProcsSpinner = (Spinner)findViewById(R.id.max_procs); mMaxProcsSpinner.setOnItemSelectedListener(mMaxProcsChanged); ArrayAdapter adapter = new ArrayAdapter( @@ -168,7 +173,8 @@ public class DevelopmentSettings extends Activity { updateSharedOptions(); updateFlingerOptions(); updateSleepOptions(); - updateXmppOptions(); + updateXmppOptions(); + updateCompatibilityOptions(); try { FileInputStream in = new FileInputStream( FONT_HINTING_FILE ); @@ -235,6 +241,17 @@ public class DevelopmentSettings extends Activity { Settings.System.SHOW_PROCESSES, 0) != 0); } + private void writeCompatibilityOptions() { + Settings.System.putInt(getContentResolver(), + Settings.System.COMPATIBILITY_MODE, mCompatibilityMode ? 0 : 1); + } + + private void updateCompatibilityOptions() { + mCompatibilityMode = Settings.System.getInt( + getContentResolver(), Settings.System.COMPATIBILITY_MODE, 1) == 0; + mCompatibilityModeCB.setChecked(mCompatibilityMode); + } + private void updateFlingerOptions() { // magic communication with surface flinger. try { @@ -332,6 +349,19 @@ public class DevelopmentSettings extends Activity { } }; + private View.OnClickListener mCompatibilityModeClicked = + new View.OnClickListener() { + public void onClick(View v) { + mCompatibilityMode = ((CheckBox)v).isChecked(); + writeCompatibilityOptions(); + updateCompatibilityOptions(); + Toast toast = Toast.makeText(DevelopmentSettings.this, + R.string.development_settings_compatibility_mode_toast, + Toast.LENGTH_LONG); + toast.show(); + } +}; + private View.OnClickListener mShowLoadClicked = new View.OnClickListener() { public void onClick(View v) { boolean value = ((CheckBox)v).isChecked(); diff --git a/apps/Development/src/com/android/development/PackageBrowser.java b/apps/Development/src/com/android/development/PackageBrowser.java index e4c233f7..689183db 100644 --- a/apps/Development/src/com/android/development/PackageBrowser.java +++ b/apps/Development/src/com/android/development/PackageBrowser.java @@ -31,27 +31,38 @@ import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.text.Collator; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; -public class PackageBrowser extends ListActivity -{ +public class PackageBrowser extends ListActivity { + static class MyPackageInfo { + PackageInfo info; + String label; + } + private PackageListAdapter mAdapter; - private List mPackageInfoList = null; + private List mPackageInfoList = new ArrayList(); private Handler mHandler; - - public class PackageListAdapter extends ArrayAdapter - { - - public PackageListAdapter(Context context) - { - super(context, android.R.layout.simple_list_item_1); - mPackageInfoList = context.getPackageManager().getInstalledPackages(0); + private BroadcastReceiver mRegisteredReceiver; + + public class PackageListAdapter extends ArrayAdapter { + + public PackageListAdapter(Context context) { + super(context, R.layout.package_list_item); + List pkgs = context.getPackageManager().getInstalledPackages(0); + for (int i=0; i sDisplayNameComparator + = new Comparator() { public final int - compare(Object a, Object b) - { - CharSequence sa = ((PackageInfo) a).packageName; - CharSequence sb = ((PackageInfo) b).packageName; - return collator.compare(sa, sb); + compare(MyPackageInfo a, MyPackageInfo b) { + return collator.compare(a.label, b.label); } private final Collator collator = Collator.getInstance(); @@ -98,6 +110,14 @@ public class PackageBrowser extends ListActivity registerIntentReceivers(); } + @Override + protected void onDestroy() { + super.onDestroy(); + if (mRegisteredReceiver != null) { + unregisterReceiver(mRegisteredReceiver); + } + } + private void setupAdapter() { mAdapter = new PackageListAdapter(this); setListAdapter(mAdapter); @@ -119,9 +139,9 @@ public class PackageBrowser extends ListActivity final int curSelection = getSelectedItemPosition(); if (curSelection >= 0) { // todo: verification dialog for package deletion - final PackageInfo packageInfo = mAdapter.itemForPosition(curSelection); + final MyPackageInfo packageInfo = mAdapter.itemForPosition(curSelection); if (packageInfo != null) { - getPackageManager().deletePackage(packageInfo.packageName, + getPackageManager().deletePackage(packageInfo.info.packageName, new IPackageDeleteObserver.Stub() { public void packageDeleted(boolean succeeded) throws RemoteException { if (succeeded) { @@ -133,7 +153,7 @@ public class PackageBrowser extends ListActivity }); // todo: verification dialog for data directory - final String dataPath = packageInfo.applicationInfo.dataDir; + final String dataPath = packageInfo.info.applicationInfo.dataDir; // todo: delete the data directory } else { mHandler.post(new Runnable() { @@ -159,17 +179,17 @@ public class PackageBrowser extends ListActivity filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); - registerReceiver(new ApplicationsIntentReceiver(), filter); + mRegisteredReceiver = new ApplicationsIntentReceiver(); + registerReceiver(mRegisteredReceiver, filter); } @Override - protected void onListItemClick(ListView l, View v, int position, long id) - { - PackageInfo info = + protected void onListItemClick(ListView l, View v, int position, long id) { + MyPackageInfo info = mAdapter.itemForPosition(position); if (info != null) { Intent intent = new Intent( - null, Uri.fromParts("package", info.packageName, null)); + null, Uri.fromParts("package", info.info.packageName, null)); intent.setClass(this, PackageSummary.class); startActivity(intent); } diff --git a/apps/Development/src/com/android/development/PackageSummary.java b/apps/Development/src/com/android/development/PackageSummary.java index a6bbbb22..5610559e 100644 --- a/apps/Development/src/com/android/development/PackageSummary.java +++ b/apps/Development/src/com/android/development/PackageSummary.java @@ -31,6 +31,7 @@ import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Bundle; import android.os.RemoteException; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; @@ -90,7 +91,8 @@ public class PackageSummary extends Activity { info = pm.getPackageInfo(mPackageName, PackageManager.GET_ACTIVITIES | PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES | PackageManager.GET_PROVIDERS - | PackageManager.GET_INSTRUMENTATION); + | PackageManager.GET_INSTRUMENTATION + | PackageManager.GET_DISABLED_COMPONENTS); } catch (PackageManager.NameNotFoundException e) { } @@ -192,6 +194,7 @@ public class PackageSummary extends Activity { ActivityInfo ai = info.receivers[i]; Button view = (Button)inflate.inflate( R.layout.package_item, null, false); + Log.i("foo", "Receiver #" + i + " of " + N + ": " + ai); setItemText(view, info, ai.name); receivers.addView(view, lp); } -- 2.11.0