From cb386dc1bdaf4b1e98325442a95760b1f6ec36eb Mon Sep 17 00:00:00 2001 From: Braden Farmer Date: Fri, 27 Nov 2020 08:35:32 -0700 Subject: [PATCH] Add support for preventing 5 second delay for activity launches from Kustom widgets --- app/src/androidx86/AndroidManifest.xml | 7 ++ .../taskbar/provider/Kustom5SecsProvider.java | 94 ++++++++++++++++++++++ app/src/playstore/AndroidManifest.xml | 6 ++ 3 files changed, 107 insertions(+) create mode 100644 app/src/main/java/com/farmerbb/taskbar/provider/Kustom5SecsProvider.java diff --git a/app/src/androidx86/AndroidManifest.xml b/app/src/androidx86/AndroidManifest.xml index 9d6627fd..07d1e927 100644 --- a/app/src/androidx86/AndroidManifest.xml +++ b/app/src/androidx86/AndroidManifest.xml @@ -435,6 +435,13 @@ + + diff --git a/app/src/main/java/com/farmerbb/taskbar/provider/Kustom5SecsProvider.java b/app/src/main/java/com/farmerbb/taskbar/provider/Kustom5SecsProvider.java new file mode 100644 index 00000000..30860708 --- /dev/null +++ b/app/src/main/java/com/farmerbb/taskbar/provider/Kustom5SecsProvider.java @@ -0,0 +1,94 @@ +// From https://gist.github.com/frmz/669eeca0b20b943b7091b9078eb3247e + +package com.farmerbb.taskbar.provider; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.farmerbb.taskbar.activity.DummyActivity; + +public class Kustom5SecsProvider extends ContentProvider { + + /** + * Path used by Kustom to ask a 5 secs delay reset + */ + private final static String PATH_RESET_5SEC_DELAY = "reset5secs"; + + @Override + public boolean onCreate() { + return true; + } + + @Nullable + @Override + public Cursor query(@NonNull Uri uri, + String[] projection, + String selection, + String[] selectionArgs, + String sortOrder) { + throw new UnsupportedOperationException("Unsupported"); + } + + @Nullable + @Override + public String getType(@NonNull Uri uri) { + // Not supported + return null; + } + + @Nullable + @Override + public Uri insert(@NonNull Uri uri, ContentValues values) { + // Not supported + throw new UnsupportedOperationException("Unsupported"); + } + + @Override + public int delete(@NonNull Uri uri, + String selection, + String[] selectionArgs) { + if(PATH_RESET_5SEC_DELAY.equals(uri.getLastPathSegment())) { + /** + * Lets ensure this gets executed only by Kustom + */ + checkCallingPackage(); + /** + * This assumes you have a transparent activity that will just call finish() during its onCreate method + * Activity in this case also provides a static method for starting itself + */ + Intent intent = new Intent(getContext(), DummyActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + return 1; + } + return 0; + } + + @Override + public int update(@NonNull Uri uri, + ContentValues values, + String selection, + String[] selectionArgs) { + // Not supported + throw new UnsupportedOperationException("Unsupported"); + } + + /** + * Will check weather or not calling pkg is authorized to talk with this provider + * + * @throws SecurityException + */ + private void checkCallingPackage() throws SecurityException { + String callingPkg = getCallingPackage(); + if ("org.kustom.wallpaper".equals(callingPkg)) return; + if ("org.kustom.widget".equals(callingPkg)) return; + if ("org.kustom.lockscreen".equals(callingPkg)) return; + throw new SecurityException("Unauthorized"); + } +} \ No newline at end of file diff --git a/app/src/playstore/AndroidManifest.xml b/app/src/playstore/AndroidManifest.xml index 9ab02aeb..39c77deb 100644 --- a/app/src/playstore/AndroidManifest.xml +++ b/app/src/playstore/AndroidManifest.xml @@ -602,6 +602,12 @@ +