diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 0725386af73..a37039f7967 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -515,7 +515,7 @@ public final class Utils extends com.android.settingslib.Utils { if (resultTo == null) { context.startActivity(intent); } else { - resultTo.startActivityForResult(intent, resultRequestCode); + resultTo.getActivity().startActivityForResult(intent, resultRequestCode); } } diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index 8a99e032181..f7992cc8fd1 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -22,8 +22,10 @@ import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.app.admin.DevicePolicyManager; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -74,6 +76,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment protected static final int DLG_BASE = 0; protected boolean mFinishing; + protected boolean mListeningToPackageRemove; @Override public void onCreate(Bundle savedInstanceState) { @@ -90,6 +93,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment mUsbManager = IUsbManager.Stub.asInterface(b); retrieveAppEntry(); + startListeningToPackageRemove(); } @Override @@ -114,6 +118,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment @Override public void onDestroy() { + stopListeningToPackageRemove(); mSession.release(); super.onDestroy(); } @@ -246,4 +251,37 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment return dialogFragment; } } + + protected void startListeningToPackageRemove() { + if (mListeningToPackageRemove) { + return; + } + mListeningToPackageRemove = true; + final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED); + filter.addDataScheme("package"); + getContext().registerReceiver(mPackageRemovedReceiver, filter); + } + + protected void stopListeningToPackageRemove() { + if (!mListeningToPackageRemove) { + return; + } + mListeningToPackageRemove = false; + getContext().unregisterReceiver(mPackageRemovedReceiver); + } + + protected void onPackageRemoved() { + getActivity().finishAndRemoveTask(); + } + + protected final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String packageName = intent.getData().getSchemeSpecificPart(); + if (!mFinishing && mAppEntry.info.packageName.equals(packageName)) { + onPackageRemoved(); + } + } + }; + } diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 3f422938b39..1cf55a40a09 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -29,7 +29,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.IntentFilter; import android.content.Loader; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -165,8 +164,6 @@ public class InstalledAppDetails extends AppInfoBase private Preference mMemoryPreference; private boolean mDisableAfterUninstall; - private boolean mListeningToPackageRemove; - // Used for updating notification preference. private final NotificationBackend mBackend = new NotificationBackend(); @@ -326,7 +323,6 @@ public class InstalledAppDetails extends AppInfoBase removePreference(KEY_DATA); } mBatteryHelper = new BatteryStatsHelper(getActivity(), true); - startListeningToPackageRemove(); } @Override @@ -362,7 +358,6 @@ public class InstalledAppDetails extends AppInfoBase @Override public void onDestroy() { TrafficStats.closeQuietly(mStatsSession); - stopListeningToPackageRemove(); super.onDestroy(); } @@ -742,7 +737,7 @@ public class InstalledAppDetails extends AppInfoBase intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName); intent.putExtra(AppHeader.EXTRA_HIDE_INFO_BUTTON, true); try { - startActivity(intent); + getActivity().startActivityForResult(intent, SUB_INFO_FRAGMENT); } catch (ActivityNotFoundException e) { Log.w(LOG_TAG, "No app can handle android.intent.action.MANAGE_APP_PERMISSIONS"); } @@ -1090,6 +1085,12 @@ public class InstalledAppDetails extends AppInfoBase return summary.toString(); } + @Override + protected void onPackageRemoved() { + getActivity().finishActivity(SUB_INFO_FRAGMENT); + super.onPackageRemoved(); + } + private class MemoryUpdater extends AsyncTask { @Override @@ -1246,33 +1247,4 @@ public class InstalledAppDetails extends AppInfoBase mPermissionsPreference.setSummary(summary); } }; - - private void startListeningToPackageRemove() { - if (mListeningToPackageRemove) { - return; - } - mListeningToPackageRemove = true; - final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED); - filter.addDataScheme("package"); - getContext().registerReceiver(mPackageRemovedReceiver, filter); - } - - private void stopListeningToPackageRemove() { - if (!mListeningToPackageRemove) { - return; - } - mListeningToPackageRemove = false; - getContext().unregisterReceiver(mPackageRemovedReceiver); - } - - private final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String packageName = intent.getData().getSchemeSpecificPart(); - if (!mFinishing && mAppEntry.info.packageName.equals(packageName)) { - getActivity().finishAndRemoveTask(); - } - } - }; - }