import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ShortcutInfo;
-import android.hardware.display.DisplayManager;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.provider.Settings;
-import android.support.v4.content.LocalBroadcastManager;
-import android.view.Display;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import com.farmerbb.taskbar.BuildConfig;
-import com.farmerbb.taskbar.MainActivity;
import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.activity.dark.DesktopIconSelectAppActivityDark;
import com.farmerbb.taskbar.activity.dark.SelectAppActivityDark;
+import com.farmerbb.taskbar.content.TaskbarIntent;
import com.farmerbb.taskbar.util.AppEntry;
+import com.farmerbb.taskbar.util.ApplicationType;
+import com.farmerbb.taskbar.util.DesktopIconInfo;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.IconCache;
+import com.farmerbb.taskbar.util.LauncherHelper;
+import com.farmerbb.taskbar.util.MenuHelper;
import com.farmerbb.taskbar.util.PinnedBlockedApps;
import com.farmerbb.taskbar.util.SavedWindowSizes;
import com.farmerbb.taskbar.util.U;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import java.util.List;
public class ContextMenuActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {
- String packageName;
- String componentName;
- String appName;
- long userId = 0;
+ private AppEntry entry;
+ private DesktopIconInfo desktopIcon;
boolean showStartMenu = false;
boolean shouldHideTaskbar = false;
boolean secondaryMenu = false;
boolean dashboardOrStartMenuAppearing = false;
boolean contextMenuFix = false;
+ boolean showQuitOption = false;
List<ShortcutInfo> shortcuts;
- private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
+ private BroadcastReceiver dashboardOrStartMenuAppearingReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
dashboardOrStartMenuAppearing = true;
}
};
+ private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ finish();
+ }
+ };
+
+
@SuppressLint("RtlHardcoded")
- @SuppressWarnings("deprecation")
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_APPEARING"));
+ MenuHelper.getInstance().setContextMenuOpen(true);
+
+ Bundle args = getIntent().getBundleExtra("args");
+ entry = (AppEntry) args.getSerializable("app_entry");
+ desktopIcon = (DesktopIconInfo) args.getSerializable("desktop_icon");
- boolean isNonAppMenu = !getIntent().hasExtra("package_name") && !getIntent().hasExtra("app_name");
- showStartMenu = getIntent().getBooleanExtra("launched_from_start_menu", false);
- isStartButton = isNonAppMenu && getIntent().getBooleanExtra("is_start_button", false);
- isOverflowMenu = isNonAppMenu && getIntent().getBooleanExtra("is_overflow_menu", false);
- contextMenuFix = getIntent().hasExtra("context_menu_fix");
+ showStartMenu = args.getBoolean("launched_from_start_menu", false);
+ isStartButton = entry == null && args.getBoolean("is_start_button", false);
+ isOverflowMenu = entry == null && args.getBoolean("is_overflow_menu", false);
+ contextMenuFix = args.containsKey("context_menu_fix");
+ showQuitOption = !args.getBoolean("dont_show_quit", false);
// Determine where to position the dialog on screen
WindowManager.LayoutParams params = getWindow().getAttributes();
- DisplayManager dm = (DisplayManager) getSystemService(DISPLAY_SERVICE);
- Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
+
+ if(args.containsKey("x") && args.containsKey("y"))
+ U.applyDisplayCutoutModeTo(params);
+
+ DisplayInfo display = U.getDisplayInfo(this);
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if(resourceId > 0)
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
- if(showStartMenu) {
- int x = getIntent().getIntExtra("x", 0);
- int y = getIntent().getIntExtra("y", 0);
- int offset = getResources().getDimensionPixelSize(isOverflowMenu ? R.dimen.context_menu_offset_overflow : R.dimen.context_menu_offset);
+ if(showStartMenu || desktopIcon != null) {
+ int x = args.getInt("x", 0);
+ int y = args.getInt("y", 0);
+ int offset = getResources().getDimensionPixelSize(isOverflowMenu ? R.dimen.tb_context_menu_offset_overflow : R.dimen.tb_context_menu_offset);
switch(U.getTaskbarPosition(this)) {
case "bottom_left":
case "bottom_vertical_left":
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
params.x = x;
- params.y = display.getHeight() - y - offset;
+ params.y = display.height - y - offset;
break;
case "bottom_right":
case "bottom_vertical_right":
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
- params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
- params.y = display.getHeight() - y - offset;
+ params.x = x - getResources().getDimensionPixelSize(R.dimen.tb_context_menu_width) + offset + offset;
+ params.y = display.height - y - offset;
break;
case "top_left":
case "top_vertical_left":
case "top_right":
case "top_vertical_right":
params.gravity = Gravity.TOP | Gravity.LEFT;
- params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
+ params.x = x - getResources().getDimensionPixelSize(R.dimen.tb_context_menu_width) + offset + offset;
params.y = y - offset + statusBarHeight;
break;
}
} else {
- LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
+ LocalBroadcastManager
+ .getInstance(this)
+ .sendBroadcast(new Intent(TaskbarIntent.ACTION_HIDE_START_MENU));
- int x = getIntent().getIntExtra("x", display.getWidth());
- int y = getIntent().getIntExtra("y", display.getHeight());
- int offset = getResources().getDimensionPixelSize(R.dimen.icon_size);
+ int x = args.getInt("x", display.width);
+ int y = args.getInt("y", display.height);
+ int offset = getResources().getDimensionPixelSize(R.dimen.tb_icon_size);
switch(U.getTaskbarPosition(this)) {
case "bottom_left":
case "bottom_vertical_left":
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
params.x = offset;
- params.y = display.getHeight() - y - (isStartButton ? 0 : offset);
+ params.y = display.height - y - (isStartButton ? 0 : offset);
break;
case "bottom_right":
params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
- params.x = display.getWidth() - x;
+ params.x = display.width - x;
params.y = offset;
break;
case "bottom_vertical_right":
params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
params.x = offset;
- params.y = display.getHeight() - y - (isStartButton ? 0 : offset);
+ params.y = display.height - y - (isStartButton ? 0 : offset);
break;
case "top_left":
params.gravity = Gravity.TOP | Gravity.LEFT;
break;
case "top_right":
params.gravity = Gravity.TOP | Gravity.RIGHT;
- params.x = display.getWidth() - x;
+ params.x = display.width - x;
params.y = offset;
break;
case "top_vertical_right":
params.y = isStartButton ? 0 : y - statusBarHeight;
break;
}
+
+ if(!U.getTaskbarPosition(this).contains("vertical") && (params.x > display.width / 2))
+ params.x = params.x - getResources().getDimensionPixelSize(R.dimen.tb_context_menu_width) + offset;
}
- params.width = getResources().getDimensionPixelSize(R.dimen.context_menu_width);
+ params.width = getResources().getDimensionPixelSize(R.dimen.tb_context_menu_width);
params.dimAmount = 0;
+ if(U.isChromeOs(this) && U.getTaskbarPosition(this).contains("bottom")) {
+ SharedPreferences pref = U.getSharedPreferences(this);
+
+ if(pref.getBoolean("chrome_os_context_menu_fix", true)
+ && !pref.getBoolean("has_caption", false))
+ params.y = params.y - getResources().getDimensionPixelSize(R.dimen.tb_caption_offset);
+ }
+
getWindow().setAttributes(params);
+ if(U.isChromeOs(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
+ getWindow().setElevation(0);
+
View view = findViewById(android.R.id.list);
if(view != null) view.setPadding(0, 0, 0, 0);
intentFilter.addAction("com.farmerbb.taskbar.START_MENU_APPEARING");
intentFilter.addAction("com.farmerbb.taskbar.DASHBOARD_APPEARING");
- LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, intentFilter);
+ LocalBroadcastManager.getInstance(this).registerReceiver(dashboardOrStartMenuAppearingReceiver, intentFilter);
+ LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, new IntentFilter("com.farmerbb.taskbar.HIDE_CONTEXT_MENU"));
}
@SuppressWarnings("deprecation")
private void generateMenu() {
+ SharedPreferences pref = U.getSharedPreferences(this);
+
if(isStartButton) {
- addPreferencesFromResource(R.xml.pref_context_menu_open_settings);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_open_settings);
findPreference("open_taskbar_settings").setOnPreferenceClickListener(this);
findPreference("start_menu_apps").setOnPreferenceClickListener(this);
- if(U.launcherIsDefault(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
- addPreferencesFromResource(R.xml.pref_context_menu_change_wallpaper);
+ if(pref.getBoolean("freeform_hack", false)
+ && !U.isDesktopIconsEnabled(this)
+ && ((U.launcherIsDefault(this)
+ && !U.isOverridingFreeformHack(this, false)
+ && FreeformHackHelper.getInstance().isInFreeformWorkspace())
+ || (U.isOverridingFreeformHack(this, false)
+ && LauncherHelper.getInstance().isOnHomeScreen()))) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_change_wallpaper);
findPreference("change_wallpaper").setOnPreferenceClickListener(this);
}
- if(!getIntent().getBooleanExtra("dont_show_quit", false)) {
- addPreferencesFromResource(R.xml.pref_context_menu_quit);
+ if(showQuitOption) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_quit);
findPreference("quit_taskbar").setOnPreferenceClickListener(this);
}
} else if(isOverflowMenu) {
if(getResources().getConfiguration().screenWidthDp >= 600
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
- setTitle(R.string.tools);
+ setTitle(R.string.tb_tools);
else {
- addPreferencesFromResource(R.xml.pref_context_menu_header);
- findPreference("header").setTitle(R.string.tools);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_header);
+ findPreference("header").setTitle(R.string.tb_tools);
}
- addPreferencesFromResource(R.xml.pref_context_menu_overflow);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_overflow);
findPreference("volume").setOnPreferenceClickListener(this);
findPreference("system_settings").setOnPreferenceClickListener(this);
- findPreference("lock_device").setOnPreferenceClickListener(this);
- findPreference("power_menu").setOnPreferenceClickListener(this);
+
+ if(!U.isLibrary(this))
+ findPreference("power_menu").setOnPreferenceClickListener(this);
+ else
+ getPreferenceScreen().removePreference(findPreference("power_menu"));
+
+ if(!U.isLibrary(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
+ findPreference("lock_device").setOnPreferenceClickListener(this);
+ else
+ getPreferenceScreen().removePreference(findPreference("lock_device"));
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
findPreference("file_manager").setOnPreferenceClickListener(this);
else
getPreferenceScreen().removePreference(findPreference("file_manager"));
+ } else if(desktopIcon != null && entry == null) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_desktop_icons);
+ findPreference("add_icon_to_desktop").setOnPreferenceClickListener(this);
+ findPreference("arrange_icons").setOnPreferenceClickListener(this);
+ findPreference("sort_by_name").setOnPreferenceClickListener(this);
+ findPreference("change_wallpaper").setOnPreferenceClickListener(this);
} else {
- appName = getIntent().getStringExtra("app_name");
- packageName = getIntent().getStringExtra("package_name");
- componentName = getIntent().getStringExtra("component_name");
- userId = getIntent().getLongExtra("user_id", 0);
-
if(getResources().getConfiguration().screenWidthDp >= 600
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
- setTitle(appName);
+ setTitle(entry.getLabel());
else {
- addPreferencesFromResource(R.xml.pref_context_menu_header);
- findPreference("header").setTitle(appName);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_header);
+ findPreference("header").setTitle(entry.getLabel());
}
- SharedPreferences pref = U.getSharedPreferences(this);
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
+ if(U.hasFreeformSupport(this)
&& pref.getBoolean("freeform_hack", false)
- && !U.isGame(this, packageName)) {
- addPreferencesFromResource(R.xml.pref_context_menu_show_window_sizes);
+ && !U.isGame(this, entry.getPackageName())) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_show_window_sizes);
findPreference("show_window_sizes").setOnPreferenceClickListener(this);
}
int shortcutCount = getLauncherShortcuts();
if(shortcutCount > 1) {
- addPreferencesFromResource(R.xml.pref_context_menu_shortcuts);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_shortcuts);
findPreference("app_shortcuts").setOnPreferenceClickListener(this);
} else if(shortcutCount == 1)
generateShortcuts();
homeIntent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo defaultLauncher = pm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
- if(!packageName.contains(BuildConfig.BASE_APPLICATION_ID)
- && !packageName.equals(defaultLauncher.activityInfo.packageName)) {
+ if(desktopIcon != null) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_remove_desktop_icon);
+ findPreference("arrange_icons").setOnPreferenceClickListener(this);
+ findPreference("remove_desktop_icon").setOnPreferenceClickListener(this);
+ } else if(!entry.getPackageName().contains(BuildConfig.BASE_APPLICATION_ID)
+ && !entry.getPackageName().equals(defaultLauncher.activityInfo.packageName)) {
PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
- if(pba.isPinned(componentName)) {
- addPreferencesFromResource(R.xml.pref_context_menu_pin);
+ if(pba.isPinned(entry.getComponentName())) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_pin);
findPreference("pin_app").setOnPreferenceClickListener(this);
- findPreference("pin_app").setTitle(R.string.unpin_app);
- } else if(pba.isBlocked(componentName)) {
- addPreferencesFromResource(R.xml.pref_context_menu_block);
+ findPreference("pin_app").setTitle(R.string.tb_unpin_app);
+ } else if(pba.isBlocked(entry.getComponentName())) {
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_block);
findPreference("block_app").setOnPreferenceClickListener(this);
- findPreference("block_app").setTitle(R.string.unblock_app);
+ findPreference("block_app").setTitle(R.string.tb_unblock_app);
} else {
final int MAX_NUM_OF_COLUMNS = U.getMaxNumOfEntries(this);
if(pba.getPinnedApps().size() < MAX_NUM_OF_COLUMNS) {
- addPreferencesFromResource(R.xml.pref_context_menu_pin);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_pin);
findPreference("pin_app").setOnPreferenceClickListener(this);
- findPreference("pin_app").setTitle(R.string.pin_app);
+ findPreference("pin_app").setTitle(R.string.tb_pin_app);
}
- addPreferencesFromResource(R.xml.pref_context_menu_block);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_block);
findPreference("block_app").setOnPreferenceClickListener(this);
- findPreference("block_app").setTitle(R.string.block_app);
+ findPreference("block_app").setTitle(R.string.tb_block_app);
}
}
- addPreferencesFromResource(R.xml.pref_context_menu);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu);
findPreference("app_info").setOnPreferenceClickListener(this);
findPreference("uninstall").setOnPreferenceClickListener(this);
@SuppressWarnings("deprecation")
private void generateShortcuts() {
- addPreferencesFromResource(R.xml.pref_context_menu_shortcut_list);
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_shortcut_list);
switch(shortcuts.size()) {
case 5:
findPreference("shortcut_5").setTitle(getShortcutTitle(shortcuts.get(4)));
}
@SuppressWarnings("deprecation")
+ private void generateWindowSizes() {
+ getPreferenceScreen().removeAll();
+
+ addPreferencesFromResource(R.xml.tb_pref_context_menu_window_size_list);
+ findPreference("window_size_standard").setOnPreferenceClickListener(this);
+ findPreference("window_size_large").setOnPreferenceClickListener(this);
+ findPreference("window_size_fullscreen").setOnPreferenceClickListener(this);
+ findPreference("window_size_half_left").setOnPreferenceClickListener(this);
+ findPreference("window_size_half_right").setOnPreferenceClickListener(this);
+ findPreference("window_size_phone_size").setOnPreferenceClickListener(this);
+
+ String windowSizePref = SavedWindowSizes.getInstance(this).getWindowSize(this, entry.getPackageName());
+ CharSequence title = findPreference("window_size_" + windowSizePref).getTitle();
+ findPreference("window_size_" + windowSizePref).setTitle('\u2713' + " " + title);
+ }
+
+ @SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N_MR1)
@Override
public boolean onPreferenceClick(Preference p) {
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
- boolean appIsValid = isStartButton || isOverflowMenu ||
- !launcherApps.getActivityList(getIntent().getStringExtra("package_name"),
- userManager.getUserForSerialNumber(userId)).isEmpty();
+ boolean appIsValid = isStartButton || isOverflowMenu || desktopIcon != null ||
+ (entry != null && !launcherApps.getActivityList(entry.getPackageName(),
+ userManager.getUserForSerialNumber(entry.getUserId(this))).isEmpty());
+ secondaryMenu = false;
if(appIsValid) switch(p.getKey()) {
case "app_info":
- startFreeformActivity();
- launcherApps.startAppDetailsActivity(ComponentName.unflattenFromString(componentName), userManager.getUserForSerialNumber(userId), null, null);
+ U.launchApp(this, () ->
+ launcherApps.startAppDetailsActivity(
+ ComponentName.unflattenFromString(entry.getComponentName()),
+ userManager.getUserForSerialNumber(entry.getUserId(this)),
+ null,
+ U.getActivityOptionsBundle(this, ApplicationType.APP_PORTRAIT, getListView().getChildAt(p.getOrder()))));
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "uninstall":
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode()) {
- Intent intent2 = new Intent(ContextMenuActivity.this, DummyActivity.class);
- intent2.putExtra("uninstall", packageName);
- intent2.putExtra("user_id", userId);
+ if(U.hasFreeformSupport(this) && isInMultiWindowMode()) {
+ Intent intent2 = new Intent(this, DummyActivity.class);
+ intent2.putExtra("uninstall", entry.getPackageName());
+ intent2.putExtra("user_id", entry.getUserId(this));
- startFreeformActivity();
- startActivity(intent2);
+ try {
+ startActivity(intent2);
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
} else {
- startFreeformActivity();
-
- Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
- intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));
+ Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + entry.getPackageName()));
+ intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(entry.getUserId(this)));
try {
startActivity(intent2);
- } catch (ActivityNotFoundException e) { /* Gracefully fail */ }
+ } catch (ActivityNotFoundException | IllegalArgumentException e) { /* Gracefully fail */ }
}
showStartMenu = false;
contextMenuFix = false;
break;
case "open_taskbar_settings":
- startFreeformActivity();
+ U.launchApp(this, () -> {
+ Intent intent2 = new Intent(this, MainActivity.class);
+ intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- Intent intent2 = new Intent(this, MainActivity.class);
- intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- startActivity(intent2);
+ try {
+ startActivity(intent2,
+ U.getActivityOptionsBundle(this, ApplicationType.APP_PORTRAIT, getListView().getChildAt(p.getOrder())));
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
+ });
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "quit_taskbar":
- sendBroadcast(new Intent("com.farmerbb.taskbar.QUIT"));
+ Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
+ quitIntent.setPackage(getPackageName());
+ sendBroadcast(quitIntent);
showStartMenu = false;
shouldHideTaskbar = true;
break;
case "pin_app":
PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
- if(pba.isPinned(componentName))
- pba.removePinnedApp(this, componentName);
+ if(pba.isPinned(entry.getComponentName()))
+ pba.removePinnedApp(this, entry.getComponentName());
else {
Intent intent = new Intent();
- intent.setComponent(ComponentName.unflattenFromString(componentName));
+ intent.setComponent(ComponentName.unflattenFromString(entry.getComponentName()));
- LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(userId));
+ LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(entry.getUserId(this)));
if(appInfo != null) {
AppEntry newEntry = new AppEntry(
- packageName,
- componentName,
- appName,
- IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo),
+ entry.getPackageName(),
+ entry.getComponentName(),
+ entry.getLabel(),
+ IconCache.getInstance(this).getIcon(this, appInfo),
true);
- newEntry.setUserId(userId);
+ newEntry.setUserId(entry.getUserId(this));
pba.addPinnedApp(this, newEntry);
}
}
break;
case "block_app":
PinnedBlockedApps pba2 = PinnedBlockedApps.getInstance(this);
- if(pba2.isBlocked(componentName))
- pba2.removeBlockedApp(this, componentName);
- else {
- pba2.addBlockedApp(this, new AppEntry(
- packageName,
- componentName,
- appName,
- null,
- false));
- }
+ if(pba2.isBlocked(entry.getComponentName()))
+ pba2.removeBlockedApp(this, entry.getComponentName());
+ else
+ pba2.addBlockedApp(this, entry);
break;
case "show_window_sizes":
- getPreferenceScreen().removeAll();
+ generateWindowSizes();
- addPreferencesFromResource(R.xml.pref_context_menu_window_size_list);
- findPreference("window_size_standard").setOnPreferenceClickListener(this);
- findPreference("window_size_large").setOnPreferenceClickListener(this);
- findPreference("window_size_fullscreen").setOnPreferenceClickListener(this);
- findPreference("window_size_half_left").setOnPreferenceClickListener(this);
- findPreference("window_size_half_right").setOnPreferenceClickListener(this);
- findPreference("window_size_phone_size").setOnPreferenceClickListener(this);
-
- SharedPreferences pref = U.getSharedPreferences(this);
- if(pref.getBoolean("save_window_sizes", true)) {
- String windowSizePref = SavedWindowSizes.getInstance(this).getWindowSize(this, packageName);
- CharSequence title = findPreference("window_size_" + windowSizePref).getTitle();
- findPreference("window_size_" + windowSizePref).setTitle('\u2713' + " " + title);
- }
+ if(U.hasBrokenSetLaunchBoundsApi())
+ U.showToastLong(this, R.string.tb_window_sizes_not_available);
- if(U.isOPreview()) {
- U.showToast(this, R.string.window_sizes_not_available);
- }
+ getListView().setOnItemLongClickListener((parent, view, position, id) -> {
+ String[] windowSizes = { "standard", "large", "fullscreen", "half_left", "half_right", "phone_size" };
+
+ SavedWindowSizes.getInstance(this).setWindowSize(this, entry.getPackageName(), windowSizes[position]);
+
+ generateWindowSizes();
+ return true;
+ });
secondaryMenu = true;
break;
SharedPreferences pref2 = U.getSharedPreferences(this);
if(pref2.getBoolean("save_window_sizes", true)) {
- SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
+ SavedWindowSizes.getInstance(this).setWindowSize(this, entry.getPackageName(), windowSize);
}
- startFreeformActivity();
- U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);
+ U.launchApp(
+ getApplicationContext(),
+ entry,
+ windowSize,
+ false,
+ true,
+ getListView().getChildAt(p.getOrder()));
+
+ if(U.hasBrokenSetLaunchBoundsApi())
+ U.cancelToast();
showStartMenu = false;
shouldHideTaskbar = true;
case "shortcut_3":
case "shortcut_4":
case "shortcut_5":
- U.startShortcut(getApplicationContext(), packageName, componentName, shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));
+ U.startShortcut(
+ getApplicationContext(),
+ entry,
+ shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1),
+ getListView().getChildAt(p.getOrder()));
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "start_menu_apps":
- startFreeformActivity();
-
Intent intent = null;
SharedPreferences pref3 = U.getSharedPreferences(this);
break;
}
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
+ if(U.hasFreeformSupport(this)
&& pref3.getBoolean("freeform_hack", false)
&& intent != null && isInMultiWindowMode()) {
intent.putExtra("no_shadow", true);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
- U.launchAppMaximized(getApplicationContext(), intent);
- } else
- startActivity(intent);
+ U.startActivityMaximized(getApplicationContext(), intent);
+ } else {
+ try {
+ startActivity(intent);
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
+ }
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "file_manager":
- Intent fileManagerIntent;
-
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- startFreeformActivity();
- fileManagerIntent = new Intent("android.provider.action.BROWSE");
- } else {
- fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
- fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
- }
+ U.launchApp(this, () -> {
+ Intent fileManagerIntent;
+
+ if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
+ fileManagerIntent = new Intent(Intent.ACTION_VIEW);
+ else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ fileManagerIntent = new Intent("android.provider.action.BROWSE");
+ else {
+ fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
+ fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
+ }
- fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
- fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
+ fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
+ fileManagerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
- try {
- startActivity(fileManagerIntent);
- } catch (ActivityNotFoundException e) {
- U.showToast(this, R.string.lock_device_not_supported);
- }
+ try {
+ startActivity(fileManagerIntent,
+ U.getActivityOptionsBundle(this, ApplicationType.APP_PORTRAIT, getListView().getChildAt(p.getOrder())));
+ } catch (ActivityNotFoundException e) {
+ U.showToast(this, R.string.tb_lock_device_not_supported);
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
+ });
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "system_settings":
- startFreeformActivity();
+ U.launchApp(this, () -> {
+ Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
+ settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
-
- try {
- startActivity(settingsIntent);
- } catch (ActivityNotFoundException e) {
- U.showToast(this, R.string.lock_device_not_supported);
- }
+ try {
+ startActivity(settingsIntent,
+ U.getActivityOptionsBundle(this, ApplicationType.APP_PORTRAIT, getListView().getChildAt(p.getOrder())));
+ } catch (ActivityNotFoundException e) {
+ U.showToast(this, R.string.tb_lock_device_not_supported);
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
+ });
showStartMenu = false;
shouldHideTaskbar = true;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
+ case "add_icon_to_desktop":
+ Intent intent2 = null;
+
+ SharedPreferences pref4 = U.getSharedPreferences(this);
+ switch(pref4.getString("theme", "light")) {
+ case "light":
+ intent2 = new Intent(this, DesktopIconSelectAppActivity.class);
+ break;
+ case "dark":
+ intent2 = new Intent(this, DesktopIconSelectAppActivityDark.class);
+ break;
+ }
+
+ if(intent2 != null)
+ intent2.putExtra("desktop_icon", desktopIcon);
+
+ if(U.hasFreeformSupport(this)
+ && pref4.getBoolean("freeform_hack", false)
+ && intent2 != null && isInMultiWindowMode()) {
+ intent2.putExtra("no_shadow", true);
+ intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
+
+ U.startActivityMaximized(getApplicationContext(), intent2);
+ } else {
+ try {
+ startActivity(intent2);
+ } catch (IllegalArgumentException e) { /* Gracefully fail */ }
+ }
+
+ showStartMenu = false;
+ shouldHideTaskbar = true;
+ contextMenuFix = false;
+ break;
+ case "arrange_icons":
+ LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.ENTER_ICON_ARRANGE_MODE"));
+ break;
+ case "sort_by_name":
+ LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.SORT_DESKTOP_ICONS"));
+ break;
case "change_wallpaper":
- Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.set_wallpaper));
+ if(LauncherHelper.getInstance().isOnHomeScreen())
+ LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.TEMP_HIDE_TASKBAR"));
+
+ Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.tb_set_wallpaper));
intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- U.launchAppMaximized(getApplicationContext(), intent3);
+ U.startActivityMaximized(getApplicationContext(), intent3);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
+ case "remove_desktop_icon":
+ try {
+ SharedPreferences pref5 = U.getSharedPreferences(this);
+ JSONArray jsonIcons = new JSONArray(pref5.getString("desktop_icons", "[]"));
+ int iconToRemove = -1;
+
+ for(int i = 0; i < jsonIcons.length(); i++) {
+ DesktopIconInfo info = DesktopIconInfo.fromJson(jsonIcons.getJSONObject(i));
+ if(info != null && info.column == desktopIcon.column && info.row == desktopIcon.row) {
+ iconToRemove = i;
+ break;
+ }
+ }
+
+ if(iconToRemove > -1) {
+ jsonIcons.remove(iconToRemove);
+
+ pref5.edit().putString("desktop_icons", jsonIcons.toString()).apply();
+ LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.REFRESH_DESKTOP_ICONS"));
+ }
+ } catch (JSONException e) { /* Gracefully fail */ }
+ break;
}
if(!secondaryMenu) finish();
@Override
public void finish() {
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_DISAPPEARING"));
+ MenuHelper.getInstance().setContextMenuOpen(false);
if(!dashboardOrStartMenuAppearing) {
- if(showStartMenu)
- LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.TOGGLE_START_MENU_ALT"));
- else if(shouldHideTaskbar) {
- SharedPreferences pref = U.getSharedPreferences(this);
- if(pref.getBoolean("hide_taskbar", true) && !FreeformHackHelper.getInstance().isInFreeformWorkspace())
- LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_TASKBAR"));
+ if (showStartMenu) {
+ LocalBroadcastManager
+ .getInstance(this)
+ .sendBroadcast(new Intent(TaskbarIntent.ACTION_TOGGLE_START_MENU));
+ } else {
+ LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.RESET_START_MENU"));
+
+ if(shouldHideTaskbar && U.shouldCollapse(this, true)) {
+ LocalBroadcastManager
+ .getInstance(this)
+ .sendBroadcast(new Intent(TaskbarIntent.ACTION_HIDE_TASKBAR));
+ }
}
}
- super.finish();
- }
-
- @SuppressWarnings("deprecation")
- private void startFreeformActivity() {
SharedPreferences pref = U.getSharedPreferences(this);
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
- && pref.getBoolean("taskbar_active", false)
- && pref.getBoolean("freeform_hack", false)
- && isInMultiWindowMode()
- && !FreeformHackHelper.getInstance().isFreeformHackActive()) {
- U.startFreeformHack(this, false, false);
- }
+
+ super.finish();
+ if(showStartMenu || pref.getBoolean("disable_animations", false))
+ overridePendingTransition(0, 0);
}
@TargetApi(Build.VERSION_CODES.N_MR1)
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery();
- query.setActivity(ComponentName.unflattenFromString(componentName));
+ query.setActivity(ComponentName.unflattenFromString(entry.getComponentName()));
query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC
| LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
| LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED);
- shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(userId));
+ shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(entry.getUserId(this)));
if(shortcuts != null)
return shortcuts.size();
}
getPreferenceScreen().removeAll();
generateMenu();
+
+ getListView().setOnItemLongClickListener(null);
+
+ if(U.hasBrokenSetLaunchBoundsApi())
+ U.cancelToast();
} else {
if(contextMenuFix && !showStartMenu)
- U.startFreeformHack(this, false, false);
+ U.startFreeformHack(this);
super.onBackPressed();
+ if(FreeformHackHelper.getInstance().isInFreeformWorkspace())
+ overridePendingTransition(0, 0);
}
}
protected void onDestroy() {
super.onDestroy();
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(dashboardOrStartMenuAppearingReceiver);
LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);
}
-}
\ No newline at end of file
+}