com.farmerbb.taskbar.activity.ContextMenuActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.farmerbb.taskbar.activity.ContextMenuActivity.java

Source

/* Copyright 2016 Braden Farmer
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.farmerbb.taskbar.activity;

import android.accessibilityservice.AccessibilityService;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
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.os.Bundle;
import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.provider.Settings;
import android.support.v4.content.LocalBroadcastManager;
import android.view.Display;
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.SelectAppActivityDark;
import com.farmerbb.taskbar.util.AppEntry;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.IconCache;
import com.farmerbb.taskbar.util.PinnedBlockedApps;
import com.farmerbb.taskbar.util.SavedWindowSizes;
import com.farmerbb.taskbar.util.U;

import java.util.List;

public class ContextMenuActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {

    String packageName;
    String componentName;
    String appName;
    long userId = 0;

    boolean showStartMenu = false;
    boolean shouldHideTaskbar = false;
    boolean isStartButton = false;
    boolean isOverflowMenu = false;
    boolean secondaryMenu = false;
    boolean dashboardOrStartMenuAppearing = false;
    boolean contextMenuFix = false;

    List<ShortcutInfo> shortcuts;

    private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            dashboardOrStartMenuAppearing = true;
            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"));

        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");

        // 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);

        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);

            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;
                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;
                break;
            case "top_left":
            case "top_vertical_left":
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = x;
                params.y = y - offset + statusBarHeight;
                break;
            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.y = y - offset + statusBarHeight;
                break;
            }
        } else {
            LocalBroadcastManager.getInstance(this)
                    .sendBroadcast(new Intent("com.farmerbb.taskbar.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);

            switch (U.getTaskbarPosition(this)) {
            case "bottom_left":
                params.gravity = Gravity.BOTTOM | Gravity.LEFT;
                params.x = isStartButton ? 0 : x;
                params.y = offset;
                break;
            case "bottom_vertical_left":
                params.gravity = Gravity.BOTTOM | Gravity.LEFT;
                params.x = offset;
                params.y = display.getHeight() - y - (isStartButton ? 0 : offset);
                break;
            case "bottom_right":
                params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
                params.x = display.getWidth() - 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);
                break;
            case "top_left":
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = isStartButton ? 0 : x;
                params.y = offset;
                break;
            case "top_vertical_left":
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = offset;
                params.y = isStartButton ? 0 : y - statusBarHeight;
                break;
            case "top_right":
                params.gravity = Gravity.TOP | Gravity.RIGHT;
                params.x = display.getWidth() - x;
                params.y = offset;
                break;
            case "top_vertical_right":
                params.gravity = Gravity.TOP | Gravity.RIGHT;
                params.x = offset;
                params.y = isStartButton ? 0 : y - statusBarHeight;
                break;
            }
        }

        params.width = getResources().getDimensionPixelSize(R.dimen.context_menu_width);
        params.dimAmount = 0;

        getWindow().setAttributes(params);

        View view = findViewById(android.R.id.list);
        if (view != null)
            view.setPadding(0, 0, 0, 0);

        generateMenu();

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.farmerbb.taskbar.START_MENU_APPEARING");
        intentFilter.addAction("com.farmerbb.taskbar.DASHBOARD_APPEARING");

        LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, intentFilter);
    }

    @SuppressWarnings("deprecation")
    private void generateMenu() {
        if (isStartButton) {
            addPreferencesFromResource(R.xml.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);
                findPreference("change_wallpaper").setOnPreferenceClickListener(this);
            }

            if (!getIntent().getBooleanExtra("dont_show_quit", false)) {
                addPreferencesFromResource(R.xml.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);
            else {
                addPreferencesFromResource(R.xml.pref_context_menu_header);
                findPreference("header").setTitle(R.string.tools);
            }

            addPreferencesFromResource(R.xml.pref_context_menu_overflow);
            findPreference("volume").setOnPreferenceClickListener(this);
            findPreference("system_settings").setOnPreferenceClickListener(this);
            findPreference("lock_device").setOnPreferenceClickListener(this);
            findPreference("power_menu").setOnPreferenceClickListener(this);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                findPreference("file_manager").setOnPreferenceClickListener(this);
            else
                getPreferenceScreen().removePreference(findPreference("file_manager"));
        } 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);
            else {
                addPreferencesFromResource(R.xml.pref_context_menu_header);
                findPreference("header").setTitle(appName);
            }

            SharedPreferences pref = U.getSharedPreferences(this);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && pref.getBoolean("freeform_hack", false)
                    && !U.isGame(this, packageName)) {
                addPreferencesFromResource(R.xml.pref_context_menu_show_window_sizes);
                findPreference("show_window_sizes").setOnPreferenceClickListener(this);
            }

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
                int shortcutCount = getLauncherShortcuts();

                if (shortcutCount > 1) {
                    addPreferencesFromResource(R.xml.pref_context_menu_shortcuts);
                    findPreference("app_shortcuts").setOnPreferenceClickListener(this);
                } else if (shortcutCount == 1)
                    generateShortcuts();
            }

            final PackageManager pm = getPackageManager();
            Intent homeIntent = new Intent(Intent.ACTION_MAIN);
            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)) {
                PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);

                if (pba.isPinned(componentName)) {
                    addPreferencesFromResource(R.xml.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("block_app").setOnPreferenceClickListener(this);
                    findPreference("block_app").setTitle(R.string.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);
                        findPreference("pin_app").setOnPreferenceClickListener(this);
                        findPreference("pin_app").setTitle(R.string.pin_app);
                    }

                    addPreferencesFromResource(R.xml.pref_context_menu_block);
                    findPreference("block_app").setOnPreferenceClickListener(this);
                    findPreference("block_app").setTitle(R.string.block_app);
                }
            }

            addPreferencesFromResource(R.xml.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);
        switch (shortcuts.size()) {
        case 5:
            findPreference("shortcut_5").setTitle(getShortcutTitle(shortcuts.get(4)));
            findPreference("shortcut_5").setOnPreferenceClickListener(this);
        case 4:
            findPreference("shortcut_4").setTitle(getShortcutTitle(shortcuts.get(3)));
            findPreference("shortcut_4").setOnPreferenceClickListener(this);
        case 3:
            findPreference("shortcut_3").setTitle(getShortcutTitle(shortcuts.get(2)));
            findPreference("shortcut_3").setOnPreferenceClickListener(this);
        case 2:
            findPreference("shortcut_2").setTitle(getShortcutTitle(shortcuts.get(1)));
            findPreference("shortcut_2").setOnPreferenceClickListener(this);
        case 1:
            findPreference("shortcut_1").setTitle(getShortcutTitle(shortcuts.get(0)));
            findPreference("shortcut_1").setOnPreferenceClickListener(this);
            break;
        }

        switch (shortcuts.size()) {
        case 1:
            getPreferenceScreen().removePreference(findPreference("shortcut_2"));
        case 2:
            getPreferenceScreen().removePreference(findPreference("shortcut_3"));
        case 3:
            getPreferenceScreen().removePreference(findPreference("shortcut_4"));
        case 4:
            getPreferenceScreen().removePreference(findPreference("shortcut_5"));
            break;
        }
    }

    @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();

        if (appIsValid)
            switch (p.getKey()) {
            case "app_info":
                startFreeformActivity();
                launcherApps.startAppDetailsActivity(ComponentName.unflattenFromString(componentName),
                        userManager.getUserForSerialNumber(userId), null, null);

                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);

                    startFreeformActivity();
                    startActivity(intent2);
                } else {
                    startFreeformActivity();

                    Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
                    intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));

                    try {
                        startActivity(intent2);
                    } catch (ActivityNotFoundException e) {
                        /* Gracefully fail */ }
                }

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "open_taskbar_settings":
                startFreeformActivity();

                Intent intent2 = new Intent(this, MainActivity.class);
                intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent2);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "quit_taskbar":
                Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
                quitIntent.setPackage(BuildConfig.APPLICATION_ID);
                sendBroadcast(quitIntent);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "pin_app":
                PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
                if (pba.isPinned(componentName))
                    pba.removePinnedApp(this, componentName);
                else {
                    Intent intent = new Intent();
                    intent.setComponent(ComponentName.unflattenFromString(componentName));

                    LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent,
                            userManager.getUserForSerialNumber(userId));
                    if (appInfo != null) {
                        AppEntry newEntry = new AppEntry(packageName, componentName, appName,
                                IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo), true);

                        newEntry.setUserId(userId);
                        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));
                }
                break;
            case "show_window_sizes":
                getPreferenceScreen().removeAll();

                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.isOPreview()) {
                    U.showToast(this, R.string.window_sizes_not_available);
                }

                secondaryMenu = true;
                break;
            case "window_size_standard":
            case "window_size_large":
            case "window_size_fullscreen":
            case "window_size_half_left":
            case "window_size_half_right":
            case "window_size_phone_size":
                String windowSize = p.getKey().replace("window_size_", "");

                SharedPreferences pref2 = U.getSharedPreferences(this);
                if (pref2.getBoolean("save_window_sizes", true)) {
                    SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
                }

                startFreeformActivity();
                U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "app_shortcuts":
                getPreferenceScreen().removeAll();
                generateShortcuts();

                secondaryMenu = true;
                break;
            case "shortcut_1":
            case "shortcut_2":
            case "shortcut_3":
            case "shortcut_4":
            case "shortcut_5":
                U.startShortcut(getApplicationContext(), packageName, componentName,
                        shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "start_menu_apps":
                startFreeformActivity();

                Intent intent = null;

                SharedPreferences pref3 = U.getSharedPreferences(this);
                switch (pref3.getString("theme", "light")) {
                case "light":
                    intent = new Intent(this, SelectAppActivity.class);
                    break;
                case "dark":
                    intent = new Intent(this, SelectAppActivityDark.class);
                    break;
                }

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && 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);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "volume":
                AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
                audio.adjustSuggestedStreamVolume(AudioManager.ADJUST_SAME, AudioManager.USE_DEFAULT_STREAM_TYPE,
                        AudioManager.FLAG_SHOW_UI);

                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"));
                }

                fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
                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);
                }

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "system_settings":
                startFreeformActivity();

                Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);

                try {
                    startActivity(settingsIntent);
                } catch (ActivityNotFoundException e) {
                    U.showToast(this, R.string.lock_device_not_supported);
                }

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "lock_device":
                U.lockDevice(this);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "power_menu":
                U.sendAccessibilityAction(this, AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            case "change_wallpaper":
                Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER),
                        getString(R.string.set_wallpaper));
                intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                U.launchAppMaximized(getApplicationContext(), intent3);

                showStartMenu = false;
                shouldHideTaskbar = true;
                contextMenuFix = false;
                break;
            }

        if (!secondaryMenu)
            finish();
        return true;
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (!isFinishing())
            finish();
    }

    @Override
    public void finish() {
        LocalBroadcastManager.getInstance(this)
                .sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_DISAPPEARING"));

        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"));
            }
        }

        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);
        }
    }

    @TargetApi(Build.VERSION_CODES.N_MR1)
    private int getLauncherShortcuts() {
        LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
        if (launcherApps.hasShortcutHostPermission()) {
            UserManager userManager = (UserManager) getSystemService(USER_SERVICE);

            LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery();
            query.setActivity(ComponentName.unflattenFromString(componentName));
            query.setQueryFlags(
                    LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC | LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
                            | LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED);

            shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(userId));
            if (shortcuts != null)
                return shortcuts.size();
        }

        return 0;
    }

    @TargetApi(Build.VERSION_CODES.N_MR1)
    private CharSequence getShortcutTitle(ShortcutInfo shortcut) {
        CharSequence longLabel = shortcut.getLongLabel();
        if (longLabel != null && longLabel.length() > 0 && longLabel.length() <= 20)
            return longLabel;
        else
            return shortcut.getShortLabel();
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onBackPressed() {
        if (secondaryMenu) {
            secondaryMenu = false;

            getPreferenceScreen().removeAll();
            generateMenu();
        } else {
            if (contextMenuFix && !showStartMenu)
                U.startFreeformHack(this, false, false);

            super.onBackPressed();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);
    }
}