From 1c5c22eba5d052cee87991f1de9826104933c71a Mon Sep 17 00:00:00 2001 From: Andy Mast Date: Thu, 24 Jul 2014 15:11:47 -0700 Subject: Allow themes to be deleted from chooser Change-Id: I782404044e66707f06366c3c69db67a3eeb7dd55 --- .../theme/chooserv2/ChooserActivity.java | 10 ++++ .../cyanogenmod/theme/chooserv2/ThemeFragment.java | 60 ++++++++++++++++++---- 2 files changed, 61 insertions(+), 9 deletions(-) (limited to 'src/org') diff --git a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java index 3f8002b..e748e05 100644 --- a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java +++ b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java @@ -52,6 +52,7 @@ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_RINGTONES; public class ChooserActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks, ThemeManager.ThemeChangeListener { public static final String DEFAULT = ThemeConfig.HOLO_DEFAULT; + public static final int REQUEST_UNINSTALL = 1; // Request code private static final long SLIDE_CONTENT_ANIM_DURATION = 300L; private static final long MOVE_TO_MY_THEME_DELAY = 750L; @@ -407,6 +408,15 @@ public class ChooserActivity extends FragmentActivity return ThemeFragment.newInstance(pkgName); } + @Override + public int getItemPosition(Object object) { + ThemeFragment fragment = (ThemeFragment) object; + if (fragment.isUninstalled()) { + return POSITION_NONE; + } + return super.getItemPosition(object); + } + /** * The first card should be the user's currently applied theme components so we * will always return at least 1 or mCursor.getCount() + 1 diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java index 6415e5e..5d26aad 100644 --- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java +++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java @@ -20,6 +20,8 @@ import android.animation.ValueAnimator; import android.app.WallpaperManager; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ThemeUtils; import android.content.res.AssetManager; @@ -56,6 +58,7 @@ import android.util.SparseArray; import android.view.Display; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -70,7 +73,6 @@ import android.widget.LinearLayout; import android.widget.PopupMenu; import android.widget.ProgressBar; import android.widget.RelativeLayout; - import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; @@ -120,6 +122,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb public static final int ANIMATE_TITLE_OUT_DURATION = 400; public static final int ANIMATE_PROGRESS_OUT_DURATION = 400; public static final int ANIMATE_TITLE_IN_DURATION = 500; + public static final int REQUEST_UNINSTALL = 1; // Request code private static final String NAVIGATION_BAR_BACKGROUND = "navbar_background"; @@ -222,6 +225,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb private Handler mHandler; + private boolean mIsUninstalled; private int mActiveCardId = -1; private ComponentSelector mSelector; // Supported components for the theme this fragment represents @@ -320,18 +324,34 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb mOverflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - PopupMenu menu = new PopupMenu(getActivity(), mTitleCard, Gravity.END); - menu.getMenuInflater().inflate(R.menu.overflow, menu.getMenu()); - menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + PopupMenu popupmenu = new PopupMenu(getActivity(), mTitleCard, Gravity.END); + popupmenu.getMenuInflater().inflate(R.menu.overflow, popupmenu.getMenu()); + + if (CURRENTLY_APPLIED_THEME.equals(mPkgName) || + mPkgName.equals(ThemeUtils.getDefaultThemePackageName(getActivity())) || + mPkgName.equals(ThemeConfig.HOLO_DEFAULT)) { + Menu menu = popupmenu.getMenu(); + menu.findItem(R.id.menu_delete).setEnabled(false); + } + + popupmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - Toast.makeText(getActivity(), - item.toString(), - Toast.LENGTH_LONG).show(); + switch(item.getItemId()) { + case R.id.menu_author: + Toast.makeText(getActivity(), + "Not supported", + Toast.LENGTH_LONG).show(); + break; + case R.id.menu_delete: + uninstallTheme(); + break; + } + return true; } }); - menu.show(); + popupmenu.show(); } }); mApply = (ImageView) v.findViewById(R.id.apply); @@ -1744,6 +1764,29 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb getLoaderManager().restartLoader(LOADER_ID_ALL, null, ThemeFragment.this); } + private void uninstallTheme() { + Uri packageURI = Uri.parse("package:" + mPkgName); + Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI); + uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, true); + startActivityForResult(uninstallIntent, + ChooserActivity.REQUEST_UNINSTALL); + } + + public void onActivityResult (int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_UNINSTALL) { + try { + ApplicationInfo ainfo = getActivity() + .getPackageManager().getApplicationInfo(mPkgName, 0); + } catch (PackageManager.NameNotFoundException e) { + mIsUninstalled = true; + } + } + } + + public boolean isUninstalled() { + return mIsUninstalled; + } + class AnimationLoader extends AsyncTask { Context mContext; String mPkgName; @@ -1765,7 +1808,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb @Override protected void onPreExecute() { super.onPreExecute(); - mBootAnim.setImageDrawable(null); } @Override -- cgit v1.1