Update shortcut when resume MainActivity (#2285)

This commit is contained in:
Howard Wu 2022-12-06 21:26:12 +08:00 committed by GitHub
parent afa1eb0bf9
commit 47a991db8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 17 deletions

View File

@ -164,7 +164,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
return new ViewHolder(ItemModuleBinding.inflate(activity.getLayoutInflater(), parent, false));
}
private boolean shouldHideApp(PackageInfo info, ApplicationWithEquals app, HashSet<ScopeAdapter.ApplicationWithEquals> tmpChkList) {
private boolean shouldHideApp(PackageInfo info, ApplicationWithEquals app, HashSet<ApplicationWithEquals> tmpChkList) {
if (info.packageName.equals("android")) {
return false;
}

View File

@ -23,13 +23,13 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.core.os.BuildCompat;
import androidx.navigation.NavController;
import androidx.navigation.NavOptions;
import androidx.navigation.Navigation;
@ -45,6 +45,7 @@ import org.lsposed.manager.databinding.ActivityMainBinding;
import org.lsposed.manager.repo.RepoLoader;
import org.lsposed.manager.ui.activity.base.BaseActivity;
import org.lsposed.manager.util.ModuleUtil;
import org.lsposed.manager.util.ShortcutUtil;
import org.lsposed.manager.util.UpdateUtil;
import java.util.HashSet;
@ -153,7 +154,7 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
}
public void restart() {
if (BuildCompat.isAtLeastS() || App.isParasitic()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || App.isParasitic()) {
recreate();
} else {
try {
@ -262,6 +263,9 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
}
}
}
if(App.isParasitic()){
ShortcutUtil.updateShortcut();
}
}
private void setModulesSummary(int moduleCount) {

View File

@ -17,19 +17,24 @@ public class WelcomeDialog extends DialogFragment {
private static boolean shown = false;
private Dialog parasiticDialog(BlurBehindDialogBuilder builder) {
return builder
var shortcutSupported = ShortcutUtil.isRequestPinShortcutSupported(requireContext());
builder
.setTitle(R.string.parasitic_welcome)
.setMessage(R.string.parasitic_welcome_summary)
.setMessage(shortcutSupported ? R.string.parasitic_welcome_summary :
R.string.parasitic_welcome_summary_no_shortcut_support)
.setNegativeButton(R.string.never_show, (dialog, which) ->
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply())
.setNeutralButton(R.string.create_shortcut, (dialog, which) ->
ShortcutUtil.requestPinLaunchShortcut(() ->
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply()))
.setPositiveButton(android.R.string.ok, null)
.create();
.setPositiveButton(android.R.string.ok, null);
if (shortcutSupported)
builder.setNeutralButton(R.string.create_shortcut, (dialog, which) ->
ShortcutUtil.requestPinLaunchShortcut(() ->
App.getPreferences().edit().putBoolean("never_show_welcome",
true).apply()));
return builder.create();
}
private Dialog appDialog(BlurBehindDialogBuilder builder) {
return builder
.setTitle(R.string.app_welcome)
.setMessage(R.string.app_welcome_summary)

View File

@ -174,7 +174,7 @@ public class SettingsFragment extends BaseFragment {
Preference shortcut = findPreference("add_shortcut");
if (shortcut != null) {
shortcut.setVisible(App.isParasitic());
shortcut.setVisible(App.isParasitic() && ShortcutUtil.isRequestPinShortcutSupported(requireContext()));
if (ShortcutUtil.isLaunchShortcutPinned()) {
shortcut.setEnabled(false);
shortcut.setSummary(R.string.settings_created_shortcut_summary);

View File

@ -19,10 +19,13 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
import android.util.Log;
import org.lsposed.manager.App;
import org.lsposed.manager.R;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class ShortcutUtil {
@ -30,7 +33,7 @@ public class ShortcutUtil {
private static Bitmap getBitmap(Context context, int id) {
var r = context.getResources();
var res = r.getDrawable(id, r.newTheme());
var res = r.getDrawable(id, context.getTheme());
if (res instanceof BitmapDrawable) {
return ((BitmapDrawable) res).getBitmap();
} else {
@ -108,20 +111,42 @@ public class ShortcutUtil {
return PendingIntent.getBroadcast(context, 0, intent, flags).getIntentSender();
}
public static void requestPinLaunchShortcut(Runnable afterPinned) {
if (!App.isParasitic()) throw new RuntimeException();
var context = App.getInstance();
private static ShortcutInfo.Builder getShortcutBuilder(Context context) {
var builder = new ShortcutInfo.Builder(context, SHORTCUT_ID)
.setShortLabel(context.getString(R.string.app_name))
.setIntent(getLaunchIntent(context))
.setIcon(Icon.createWithAdaptiveBitmap(getBitmap(context, R.drawable.ic_launcher)));
.setIcon(Icon.createWithAdaptiveBitmap(getBitmap(context,
R.drawable.ic_launcher)));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
var activity = new ComponentName(context.getPackageName(),
"android.app.AppDetailsActivity");
builder.setActivity(activity);
}
return builder;
}
public static boolean isRequestPinShortcutSupported(Context context) {
var sm = context.getSystemService(ShortcutManager.class);
sm.requestPinShortcut(builder.build(), registerReceiver(context, afterPinned));
return sm.isRequestPinShortcutSupported();
}
public static void requestPinLaunchShortcut(Runnable afterPinned) {
if (!App.isParasitic()) throw new RuntimeException();
var context = App.getInstance();
var sm = context.getSystemService(ShortcutManager.class);
if (!isRequestPinShortcutSupported(context)) return;
sm.requestPinShortcut(getShortcutBuilder(context).build(),
registerReceiver(context, afterPinned));
}
public static boolean updateShortcut() {
if (!isLaunchShortcutPinned()) return false;
Log.d(App.TAG, "update shortcut");
var context = App.getInstance();
var sm = context.getSystemService(ShortcutManager.class);
List<ShortcutInfo> shortcutInfoList = new ArrayList<>();
shortcutInfoList.add(getShortcutBuilder(context).build());
return sm.updateShortcuts(shortcutInfoList);
}
public static boolean isLaunchShortcutPinned() {

View File

@ -80,6 +80,7 @@
<!-- WelcomeDialog -->
<string name="parasitic_welcome">Welcome to LSPosed</string>
<string name="parasitic_welcome_summary">You are using the parasitic manager, which can create shortcut or still open from notification.</string>
<string name="parasitic_welcome_summary_no_shortcut_support">You are using the parasitic manager, which can open from notification.</string>
<string name="create_shortcut">Create shortcut</string>
<string name="never_show">Never show</string>
<string name="app_welcome">Parasitic Manager Recommended</string>