diff options
Diffstat (limited to 'src/com/android/wallpaper')
-rw-r--r-- | src/com/android/wallpaper/livepicker/LiveWallpaperChange.java | 31 | ||||
-rw-r--r-- | src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java | 25 |
2 files changed, 52 insertions, 4 deletions
diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperChange.java b/src/com/android/wallpaper/livepicker/LiveWallpaperChange.java index efaf563..724e791 100644 --- a/src/com/android/wallpaper/livepicker/LiveWallpaperChange.java +++ b/src/com/android/wallpaper/livepicker/LiveWallpaperChange.java @@ -20,12 +20,18 @@ import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.content.ComponentName; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.os.Bundle; import android.os.Parcelable; import android.service.wallpaper.WallpaperService; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; @@ -33,6 +39,7 @@ import java.util.List; public class LiveWallpaperChange extends LiveWallpaperPreview { private static final String TAG = "CHANGE_LIVE_WALLPAPER"; + private static final String KEY_ACTION_DELETE_LIVE_WALLPAPER = "action_delete_live_wallpaper"; @Override protected void init() { @@ -65,8 +72,7 @@ public class LiveWallpaperChange extends LiveWallpaperPreview { finish(); return; } - - initUI(info); + initUI(info, getDeleteAction(ri.serviceInfo)); return; } } @@ -75,4 +81,25 @@ public class LiveWallpaperChange extends LiveWallpaperPreview { Log.w(TAG, "Not a live wallpaper: " + comp); finish(); } + + @Nullable + private String getDeleteAction(@NonNull ServiceInfo serviceInfo) { + if (!isPackagePreInstalled(serviceInfo.applicationInfo)) { + Log.d(TAG, "This wallpaper is not pre-installed."); + return null; + } + + final Bundle metaData = serviceInfo.metaData; + if (metaData != null) { + return metaData.getString(KEY_ACTION_DELETE_LIVE_WALLPAPER); + } + return null; + } + + private boolean isPackagePreInstalled(ApplicationInfo info) { + if (info != null && (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + return true; + } + return false; + } } diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java b/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java index 6494434..6056859 100644 --- a/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java +++ b/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java @@ -60,6 +60,8 @@ import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toolbar; +import androidx.annotation.Nullable; + import java.io.IOException; public class LiveWallpaperPreview extends Activity { @@ -75,6 +77,7 @@ public class LiveWallpaperPreview extends Activity { private String mPackageName; private Intent mWallpaperIntent; private Intent mSettingsIntent; + private Intent mDeleteIntent; private TextView mAttributionTitle; private TextView mAttributionSubtitle1; @@ -98,10 +101,10 @@ public class LiveWallpaperPreview extends Activity { setResult(RESULT_CANCELED); finish(); } - initUI(info); + initUI(info, null /* deleteAction */); } - protected void initUI(WallpaperInfo info) { + protected void initUI(WallpaperInfo info, @Nullable String deleteAction) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); @@ -146,6 +149,12 @@ public class LiveWallpaperPreview extends Activity { mWallpaperConnection = new WallpaperConnection(mWallpaperIntent); populateAttributionPane(info); + + if (!TextUtils.isEmpty(deleteAction)) { + mDeleteIntent = new Intent(deleteAction); + mDeleteIntent.setPackage(info.getPackageName()); + mDeleteIntent.putExtra(EXTRA_LIVE_WALLPAPER_INFO, info); + } } private void populateAttributionPane(WallpaperInfo info) { @@ -269,6 +278,7 @@ public class LiveWallpaperPreview extends Activity { menu.findItem(R.id.configure).setVisible(mSettingsIntent != null); menu.findItem(R.id.set_wallpaper).getActionView().setOnClickListener( this::setLiveWallpaper); + menu.findItem(R.id.delete_wallpaper).setVisible(mDeleteIntent != null); return super.onCreateOptionsMenu(menu); } @@ -317,6 +327,13 @@ public class LiveWallpaperPreview extends Activity { mWallpaperManager.setWallpaperOffsets(windowToken, 0.5f, 0.0f); } + private void deleteLiveWallpaper() { + if (mDeleteIntent != null) { + startService(mDeleteIntent); + finish(); + } + } + @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); @@ -326,6 +343,10 @@ public class LiveWallpaperPreview extends Activity { } else if (id == R.id.set_wallpaper) { setLiveWallpaper(getWindow().getDecorView()); return true; + } else if (id == R.id.delete_wallpaper) { + // TODO(b/122505782): Need delete confirm dialog. + deleteLiveWallpaper(); + return true; } else if (id == android.R.id.home) { onBackPressed(); return true; |