Update shortcut when resume MainActivity (#2285)
This commit is contained in:
parent
afa1eb0bf9
commit
47a991db8b
|
|
@ -164,7 +164,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
|
||||||
return new ViewHolder(ItemModuleBinding.inflate(activity.getLayoutInflater(), parent, false));
|
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")) {
|
if (info.packageName.equals("android")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,13 +23,13 @@ import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.os.BuildCompat;
|
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.NavOptions;
|
import androidx.navigation.NavOptions;
|
||||||
import androidx.navigation.Navigation;
|
import androidx.navigation.Navigation;
|
||||||
|
|
@ -45,6 +45,7 @@ import org.lsposed.manager.databinding.ActivityMainBinding;
|
||||||
import org.lsposed.manager.repo.RepoLoader;
|
import org.lsposed.manager.repo.RepoLoader;
|
||||||
import org.lsposed.manager.ui.activity.base.BaseActivity;
|
import org.lsposed.manager.ui.activity.base.BaseActivity;
|
||||||
import org.lsposed.manager.util.ModuleUtil;
|
import org.lsposed.manager.util.ModuleUtil;
|
||||||
|
import org.lsposed.manager.util.ShortcutUtil;
|
||||||
import org.lsposed.manager.util.UpdateUtil;
|
import org.lsposed.manager.util.UpdateUtil;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
@ -153,7 +154,7 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restart() {
|
public void restart() {
|
||||||
if (BuildCompat.isAtLeastS() || App.isParasitic()) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || App.isParasitic()) {
|
||||||
recreate();
|
recreate();
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
|
@ -262,6 +263,9 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(App.isParasitic()){
|
||||||
|
ShortcutUtil.updateShortcut();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setModulesSummary(int moduleCount) {
|
private void setModulesSummary(int moduleCount) {
|
||||||
|
|
|
||||||
|
|
@ -17,19 +17,24 @@ public class WelcomeDialog extends DialogFragment {
|
||||||
private static boolean shown = false;
|
private static boolean shown = false;
|
||||||
|
|
||||||
private Dialog parasiticDialog(BlurBehindDialogBuilder builder) {
|
private Dialog parasiticDialog(BlurBehindDialogBuilder builder) {
|
||||||
return builder
|
var shortcutSupported = ShortcutUtil.isRequestPinShortcutSupported(requireContext());
|
||||||
|
builder
|
||||||
.setTitle(R.string.parasitic_welcome)
|
.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) ->
|
.setNegativeButton(R.string.never_show, (dialog, which) ->
|
||||||
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply())
|
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply())
|
||||||
.setNeutralButton(R.string.create_shortcut, (dialog, which) ->
|
.setPositiveButton(android.R.string.ok, null);
|
||||||
ShortcutUtil.requestPinLaunchShortcut(() ->
|
if (shortcutSupported)
|
||||||
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply()))
|
builder.setNeutralButton(R.string.create_shortcut, (dialog, which) ->
|
||||||
.setPositiveButton(android.R.string.ok, null)
|
ShortcutUtil.requestPinLaunchShortcut(() ->
|
||||||
.create();
|
App.getPreferences().edit().putBoolean("never_show_welcome",
|
||||||
|
true).apply()));
|
||||||
|
return builder.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dialog appDialog(BlurBehindDialogBuilder builder) {
|
private Dialog appDialog(BlurBehindDialogBuilder builder) {
|
||||||
|
|
||||||
return builder
|
return builder
|
||||||
.setTitle(R.string.app_welcome)
|
.setTitle(R.string.app_welcome)
|
||||||
.setMessage(R.string.app_welcome_summary)
|
.setMessage(R.string.app_welcome_summary)
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ public class SettingsFragment extends BaseFragment {
|
||||||
|
|
||||||
Preference shortcut = findPreference("add_shortcut");
|
Preference shortcut = findPreference("add_shortcut");
|
||||||
if (shortcut != null) {
|
if (shortcut != null) {
|
||||||
shortcut.setVisible(App.isParasitic());
|
shortcut.setVisible(App.isParasitic() && ShortcutUtil.isRequestPinShortcutSupported(requireContext()));
|
||||||
if (ShortcutUtil.isLaunchShortcutPinned()) {
|
if (ShortcutUtil.isLaunchShortcutPinned()) {
|
||||||
shortcut.setEnabled(false);
|
shortcut.setEnabled(false);
|
||||||
shortcut.setSummary(R.string.settings_created_shortcut_summary);
|
shortcut.setSummary(R.string.settings_created_shortcut_summary);
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,13 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
import android.graphics.drawable.LayerDrawable;
|
import android.graphics.drawable.LayerDrawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.manager.App;
|
import org.lsposed.manager.App;
|
||||||
import org.lsposed.manager.R;
|
import org.lsposed.manager.R;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class ShortcutUtil {
|
public class ShortcutUtil {
|
||||||
|
|
@ -30,7 +33,7 @@ public class ShortcutUtil {
|
||||||
|
|
||||||
private static Bitmap getBitmap(Context context, int id) {
|
private static Bitmap getBitmap(Context context, int id) {
|
||||||
var r = context.getResources();
|
var r = context.getResources();
|
||||||
var res = r.getDrawable(id, r.newTheme());
|
var res = r.getDrawable(id, context.getTheme());
|
||||||
if (res instanceof BitmapDrawable) {
|
if (res instanceof BitmapDrawable) {
|
||||||
return ((BitmapDrawable) res).getBitmap();
|
return ((BitmapDrawable) res).getBitmap();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -108,20 +111,42 @@ public class ShortcutUtil {
|
||||||
return PendingIntent.getBroadcast(context, 0, intent, flags).getIntentSender();
|
return PendingIntent.getBroadcast(context, 0, intent, flags).getIntentSender();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void requestPinLaunchShortcut(Runnable afterPinned) {
|
private static ShortcutInfo.Builder getShortcutBuilder(Context context) {
|
||||||
if (!App.isParasitic()) throw new RuntimeException();
|
|
||||||
var context = App.getInstance();
|
|
||||||
var builder = new ShortcutInfo.Builder(context, SHORTCUT_ID)
|
var builder = new ShortcutInfo.Builder(context, SHORTCUT_ID)
|
||||||
.setShortLabel(context.getString(R.string.app_name))
|
.setShortLabel(context.getString(R.string.app_name))
|
||||||
.setIntent(getLaunchIntent(context))
|
.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) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
var activity = new ComponentName(context.getPackageName(),
|
var activity = new ComponentName(context.getPackageName(),
|
||||||
"android.app.AppDetailsActivity");
|
"android.app.AppDetailsActivity");
|
||||||
builder.setActivity(activity);
|
builder.setActivity(activity);
|
||||||
}
|
}
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isRequestPinShortcutSupported(Context context) {
|
||||||
var sm = context.getSystemService(ShortcutManager.class);
|
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() {
|
public static boolean isLaunchShortcutPinned() {
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@
|
||||||
<!-- WelcomeDialog -->
|
<!-- WelcomeDialog -->
|
||||||
<string name="parasitic_welcome">Welcome to LSPosed</string>
|
<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">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="create_shortcut">Create shortcut</string>
|
||||||
<string name="never_show">Never show</string>
|
<string name="never_show">Never show</string>
|
||||||
<string name="app_welcome">Parasitic Manager Recommended</string>
|
<string name="app_welcome">Parasitic Manager Recommended</string>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue