targetSdkVersion 27
// TODO keep versionName and versionCode in sync with Android-x86 manifest
- versionCode 186
+ versionCode 187
versionName "4.0"
resConfigs "en", "ja", "ru", "de", "zh-rCN", "tr"
* HomeActivity is enabled by default
* Certain activities and receivers are not exposed
-->
-<manifest android:versionCode="186"
+<manifest android:versionCode="187"
android:versionName="4.0"
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.farmerbb.taskbar" >
import android.preference.PreferenceActivity;
import android.provider.Settings;
import android.support.v4.content.LocalBroadcastManager;
-import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import com.farmerbb.taskbar.activity.dark.SelectAppActivityDark;
import com.farmerbb.taskbar.util.AppEntry;
import com.farmerbb.taskbar.util.ApplicationType;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.IconCache;
import com.farmerbb.taskbar.util.LauncherHelper;
public class ContextMenuActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {
+ private Bundle args;
+
String packageName;
String componentName;
String appName;
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_APPEARING"));
MenuHelper.getInstance().setContextMenuOpen(true);
- 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");
+ args = getIntent().getBundleExtra("args");
+
+ boolean isNonAppMenu = !args.containsKey("package_name") && !args.containsKey("app_name");
+ showStartMenu = args.getBoolean("launched_from_start_menu", false);
+ isStartButton = isNonAppMenu && args.getBoolean("is_start_button", false);
+ isOverflowMenu = isNonAppMenu && args.getBoolean("is_overflow_menu", false);
+ contextMenuFix = args.containsKey("context_menu_fix");
// Determine where to position the dialog on screen
WindowManager.LayoutParams params = getWindow().getAttributes();
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
+ DisplayInfo display = U.getDisplayInfo(this);
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
if(showStartMenu) {
- int x = getIntent().getIntExtra("x", 0);
- int y = getIntent().getIntExtra("y", 0);
+ int x = args.getInt("x", 0);
+ int y = args.getInt("y", 0);
int offset = getResources().getDimensionPixelSize(isOverflowMenu ? R.dimen.context_menu_offset_overflow : R.dimen.context_menu_offset);
switch(U.getTaskbarPosition(this)) {
case "bottom_vertical_left":
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
params.x = x;
- params.y = metrics.heightPixels - 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 = metrics.heightPixels - y - offset;
+ params.y = display.height - y - offset;
break;
case "top_left":
case "top_vertical_left":
} else {
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
- int x = getIntent().getIntExtra("x", metrics.widthPixels);
- int y = getIntent().getIntExtra("y", metrics.heightPixels);
+ int x = args.getInt("x", display.width);
+ int y = args.getInt("y", display.height);
int offset = getResources().getDimensionPixelSize(R.dimen.icon_size);
switch(U.getTaskbarPosition(this)) {
case "bottom_vertical_left":
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
params.x = offset;
- params.y = metrics.heightPixels - y - (isStartButton ? 0 : offset);
+ params.y = display.height - y - (isStartButton ? 0 : offset);
break;
case "bottom_right":
params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
- params.x = metrics.widthPixels - 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 = metrics.heightPixels - 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 = metrics.widthPixels - x;
+ params.x = display.width - x;
params.y = offset;
break;
case "top_vertical_right":
break;
}
- if(!U.getTaskbarPosition(this).contains("vertical") && (params.x > metrics.widthPixels / 2))
+ if(!U.getTaskbarPosition(this).contains("vertical") && (params.x > display.width / 2))
params.x = params.x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset;
}
findPreference("change_wallpaper").setOnPreferenceClickListener(this);
}
- if(!getIntent().getBooleanExtra("dont_show_quit", false)) {
+ if(!args.getBoolean("dont_show_quit", false)) {
addPreferencesFromResource(R.xml.pref_context_menu_quit);
findPreference("quit_taskbar").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);
+ appName = args.getString("app_name");
+ packageName = args.getString("package_name");
+ componentName = args.getString("component_name");
+ userId = args.getLong("user_id", 0);
if(getResources().getConfiguration().screenWidthDp >= 600
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
boolean appIsValid = isStartButton || isOverflowMenu ||
- !launcherApps.getActivityList(getIntent().getStringExtra("package_name"),
+ !launcherApps.getActivityList(args.getString("package_name"),
userManager.getUserForSerialNumber(userId)).isEmpty();
if(appIsValid) switch(p.getKey()) {
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
-import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.WindowManager;
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.util.DashboardHelper;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.U;
public class DashboardActivity extends Activity {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
+ DisplayInfo display = U.getDisplayInfo(this);
setContentView(R.layout.incognito);
LinearLayout layout = U.findViewById(this, R.id.incognitoLayout);
- layout.setLayoutParams(new FrameLayout.LayoutParams(metrics.widthPixels, metrics.heightPixels));
+ layout.setLayoutParams(new FrameLayout.LayoutParams(display.width, display.height));
LocalBroadcastManager.getInstance(this).registerReceiver(addWidgetReceiver, new IntentFilter("com.farmerbb.taskbar.ADD_WIDGET_REQUESTED"));
LocalBroadcastManager.getInstance(this).registerReceiver(removeWidgetReceiver, new IntentFilter("com.farmerbb.taskbar.REMOVE_WIDGET_REQUESTED"));
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.content.LocalBroadcastManager;
-import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import com.farmerbb.taskbar.service.StartMenuService;
import com.farmerbb.taskbar.service.TaskbarService;
import com.farmerbb.taskbar.util.CompatUtils;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.IconCache;
import com.farmerbb.taskbar.util.LauncherHelper;
import com.farmerbb.taskbar.util.U;
wallpaperManager.setWallpaperOffsets(getWindowToken(), 0.5f, 0.5f);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- DisplayMetrics metrics = U.getRealDisplayMetrics(HomeActivity.this);
- wallpaperManager.suggestDesiredDimensions(metrics.widthPixels, metrics.heightPixels);
+ DisplayInfo display = U.getDisplayInfo(HomeActivity.this);
+ wallpaperManager.suggestDesiredDimensions(display.width, display.height);
}
boolean shouldStartFreeformHack = shouldDelayFreeformHack && hits > 0;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
-import android.util.DisplayMetrics;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.MenuHelper;
import com.farmerbb.taskbar.util.U;
boolean powerButtonWarning = getIntent().hasExtra("power_button_warning");
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
+ DisplayInfo display = U.getDisplayInfo(this);
setContentView(R.layout.incognito);
LinearLayout layout = U.findViewById(this, R.id.incognitoLayout);
- layout.setLayoutParams(new FrameLayout.LayoutParams(metrics.widthPixels, metrics.heightPixels));
+ layout.setLayoutParams(new FrameLayout.LayoutParams(display.width, display.height));
if(!MenuHelper.getInstance().isStartMenuOpen() && !powerButtonWarning) finish();
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
-import android.util.DisplayMetrics;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.U;
super.onCreate(savedInstanceState);
setContentView(R.layout.incognito);
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
+ DisplayInfo display = U.getDisplayInfo(this);
LinearLayout layout = U.findViewById(this, R.id.incognitoLayout);
- layout.setLayoutParams(new FrameLayout.LayoutParams(metrics.widthPixels, metrics.heightPixels));
+ layout.setLayoutParams(new FrameLayout.LayoutParams(display.width, display.height));
LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, new IntentFilter("com.farmerbb.taskbar.FINISH_FREEFORM_ACTIVITY"));
FreeformHackHelper.getInstance().setTouchAbsorberActive(true);
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
-import android.graphics.Rect;
import android.graphics.Typeface;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.graphics.ColorUtils;
-import android.util.DisplayMetrics;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.widget.TextView;
import com.farmerbb.taskbar.R;
-import com.farmerbb.taskbar.activity.ContextMenuActivity;
-import com.farmerbb.taskbar.activity.dark.ContextMenuActivityDark;
import com.farmerbb.taskbar.util.AppEntry;
-import com.farmerbb.taskbar.util.ApplicationType;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.TopApps;
import com.farmerbb.taskbar.util.U;
private void openContextMenu(final AppEntry entry, final int[] location) {
LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU_NO_RESET"));
- new Handler().postDelayed(() -> {
- SharedPreferences pref = U.getSharedPreferences(getContext());
- Intent intent = null;
-
- switch(pref.getString("theme", "light")) {
- case "light":
- intent = new Intent(getContext(), ContextMenuActivity.class);
- break;
- case "dark":
- intent = new Intent(getContext(), ContextMenuActivityDark.class);
- break;
- }
-
- if(intent != null) {
- intent.putExtra("package_name", entry.getPackageName());
- intent.putExtra("app_name", entry.getLabel());
- intent.putExtra("component_name", entry.getComponentName());
- intent.putExtra("user_id", entry.getUserId(getContext()));
- intent.putExtra("launched_from_start_menu", true);
- intent.putExtra("x", location[0]);
- intent.putExtra("y", location[1]);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
- if(U.hasFreeformSupport(getContext()) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
- DisplayMetrics metrics = U.getRealDisplayMetrics(getContext());
-
- if(intent != null && U.hasBrokenSetLaunchBoundsApi())
- intent.putExtra("context_menu_fix", true);
+ Bundle args = new Bundle();
+ args.putString("package_name", entry.getPackageName());
+ args.putString("app_name", entry.getLabel());
+ args.putString("component_name", entry.getComponentName());
+ args.putLong("user_id", entry.getUserId(getContext()));
+ args.putBoolean("launched_from_start_menu", true);
+ args.putInt("x", location[0]);
+ args.putInt("y", location[1]);
- getContext().startActivity(intent,
- U.getActivityOptions(getContext(), ApplicationType.CONTEXT_MENU)
- .setLaunchBounds(new Rect(0, 0, metrics.widthPixels, metrics.heightPixels))
- .toBundle());
- } else
- getContext().startActivity(intent);
- }, shouldDelay() ? 100 : 0);
+ new Handler().postDelayed(() -> U.startContextMenuActivity(getContext(), args), shouldDelay() ? 100 : 0);
}
private boolean shouldDelay() {
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
-import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.UserHandle;
import android.provider.Settings;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.widget.SearchView;
-import android.util.DisplayMetrics;
import android.util.Patterns;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.TextView;
import com.farmerbb.taskbar.R;
-import com.farmerbb.taskbar.activity.ContextMenuActivity;
-import com.farmerbb.taskbar.activity.dark.ContextMenuActivityDark;
import com.farmerbb.taskbar.activity.InvisibleActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityAlt;
import com.farmerbb.taskbar.adapter.StartMenuAdapter;
import com.farmerbb.taskbar.util.AppEntry;
-import com.farmerbb.taskbar.util.ApplicationType;
import com.farmerbb.taskbar.util.Blacklist;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.IconCache;
private void openContextMenu(final int[] location) {
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU_NO_RESET"));
- new Handler().postDelayed(() -> {
- SharedPreferences pref = U.getSharedPreferences(this);
- Intent intent = null;
-
- switch(pref.getString("theme", "light")) {
- case "light":
- intent = new Intent(this, ContextMenuActivity.class);
- break;
- case "dark":
- intent = new Intent(this, ContextMenuActivityDark.class);
- break;
- }
-
- if(intent != null) {
- intent.putExtra("launched_from_start_menu", true);
- intent.putExtra("is_overflow_menu", true);
- intent.putExtra("x", location[0]);
- intent.putExtra("y", location[1]);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
- if(U.hasFreeformSupport(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
-
- if(intent != null && U.hasBrokenSetLaunchBoundsApi())
- intent.putExtra("context_menu_fix", true);
+ Bundle args = new Bundle();
+ args.putBoolean("launched_from_start_menu", true);
+ args.putBoolean("is_overflow_menu", true);
+ args.putInt("x", location[0]);
+ args.putInt("y", location[1]);
- startActivity(intent,
- U.getActivityOptions(this, ApplicationType.CONTEXT_MENU)
- .setLaunchBounds(
- new Rect(0, 0, metrics.widthPixels, metrics.heightPixels)
- ).toBundle());
- } else
- startActivity(intent);
- }, shouldDelay() ? 100 : 0);
+ new Handler().postDelayed(() -> U.startContextMenuActivity(this, args), shouldDelay() ? 100 : 0);
}
private boolean shouldDelay() {
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Point;
-import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.PowerManager;
import android.speech.RecognizerIntent;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.ColorUtils;
-import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import com.farmerbb.taskbar.BuildConfig;
import com.farmerbb.taskbar.activity.MainActivity;
import com.farmerbb.taskbar.R;
-import com.farmerbb.taskbar.activity.ContextMenuActivity;
-import com.farmerbb.taskbar.activity.dark.ContextMenuActivityDark;
import com.farmerbb.taskbar.activity.HomeActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
import com.farmerbb.taskbar.util.AppEntry;
-import com.farmerbb.taskbar.util.ApplicationType;
+import com.farmerbb.taskbar.util.DisplayInfo;
import com.farmerbb.taskbar.util.FreeformHackHelper;
import com.farmerbb.taskbar.util.IconCache;
import com.farmerbb.taskbar.util.LauncherHelper;
handler.post(() -> {
if(numOfEntries > 0 || fullLength) {
ViewGroup.LayoutParams params = scrollView.getLayoutParams();
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
+ DisplayInfo display = U.getDisplayInfo(this);
int recentsSize = getResources().getDimensionPixelSize(R.dimen.icon_size) * numOfEntries;
float maxRecentsSize = fullLength ? Float.MAX_VALUE : recentsSize;
if(U.getTaskbarPosition(this).contains("vertical")) {
- int maxScreenSize = metrics.heightPixels
+ int maxScreenSize = display.height
- U.getStatusBarHeight(this)
- U.getBaseTaskbarSize(this);
} catch (NullPointerException e) { /* Gracefully fail */ }
}
} else {
- int maxScreenSize = metrics.widthPixels
- - U.getBaseTaskbarSize(this);
+ int maxScreenSize = display.width - U.getBaseTaskbarSize(this);
params.width = (int) Math.min(maxRecentsSize, maxScreenSize)
+ getResources().getDimensionPixelSize(R.dimen.divider_size);
@SuppressWarnings("deprecation")
private void openContextMenu() {
SharedPreferences pref = U.getSharedPreferences(this);
- Intent intent = null;
-
- switch(pref.getString("theme", "light")) {
- case "light":
- intent = new Intent(this, ContextMenuActivity.class);
- break;
- case "dark":
- intent = new Intent(this, ContextMenuActivityDark.class);
- break;
- }
- if(intent != null) {
- intent.putExtra("dont_show_quit", LauncherHelper.getInstance().isOnHomeScreen() && !pref.getBoolean("taskbar_active", false));
- intent.putExtra("is_start_button", true);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
- if(U.hasFreeformSupport(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
-
- if(intent != null && U.hasBrokenSetLaunchBoundsApi())
- intent.putExtra("context_menu_fix", true);
+ Bundle args = new Bundle();
+ args.putBoolean("dont_show_quit",
+ LauncherHelper.getInstance().isOnHomeScreen()
+ && !pref.getBoolean("taskbar_active", false));
+ args.putBoolean("is_start_button", true);
- startActivity(intent,
- U.getActivityOptions(this, ApplicationType.CONTEXT_MENU)
- .setLaunchBounds(
- new Rect(0, 0, metrics.widthPixels, metrics.heightPixels)
- ).toBundle());
- } else
- startActivity(intent);
+ U.startContextMenuActivity(this, args);
}
private void updateButton(boolean isCollapsed) {
@SuppressWarnings("deprecation")
private void openContextMenu(AppEntry entry, int[] location) {
- SharedPreferences pref = U.getSharedPreferences(this);
- Intent intent = null;
-
- switch(pref.getString("theme", "light")) {
- case "light":
- intent = new Intent(this, ContextMenuActivity.class);
- break;
- case "dark":
- intent = new Intent(this, ContextMenuActivityDark.class);
- break;
- }
-
- if(intent != null) {
- intent.putExtra("package_name", entry.getPackageName());
- intent.putExtra("app_name", entry.getLabel());
- intent.putExtra("component_name", entry.getComponentName());
- intent.putExtra("user_id", entry.getUserId(this));
- intent.putExtra("x", location[0]);
- intent.putExtra("y", location[1]);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
- if(U.hasFreeformSupport(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
- DisplayMetrics metrics = U.getRealDisplayMetrics(this);
-
- if(intent != null && U.hasBrokenSetLaunchBoundsApi())
- intent.putExtra("context_menu_fix", true);
-
- startActivity(intent,
- U.getActivityOptions(this, ApplicationType.CONTEXT_MENU)
- .setLaunchBounds(
- new Rect(0, 0, metrics.widthPixels, metrics.heightPixels)
- ).toBundle());
- } else
- startActivity(intent);
+ Bundle args = new Bundle();
+ args.putString("package_name", entry.getPackageName());
+ args.putString("app_name", entry.getLabel());
+ args.putString("component_name", entry.getComponentName());
+ args.putLong("user_id", entry.getUserId(this));
+ args.putInt("x", location[0]);
+ args.putInt("y", location[1]);
+
+ U.startContextMenuActivity(this, args);
}
private List<AppEntry> getAppEntries() {
--- /dev/null
+/* Copyright 2018 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.util;
+
+public class DisplayInfo {
+ public int width;
+ public int height;
+ public int density;
+
+ DisplayInfo(int width, int height, int density) {
+ this.width = width;
+ this.height = height;
+ this.density = density;
+ }
+}
import com.farmerbb.taskbar.BuildConfig;
import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.activity.ContextMenuActivity;
import com.farmerbb.taskbar.activity.DummyActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
import com.farmerbb.taskbar.activity.ShortcutActivity;
import com.farmerbb.taskbar.activity.StartTaskbarActivity;
import com.farmerbb.taskbar.activity.TouchAbsorberActivity;
+import com.farmerbb.taskbar.activity.dark.ContextMenuActivityDark;
import com.farmerbb.taskbar.receiver.LockDeviceReceiver;
import com.farmerbb.taskbar.service.DashboardService;
import com.farmerbb.taskbar.service.NotificationService;
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
private static Bundle launchMode1(Context context, ApplicationType type) {
- DisplayMetrics metrics = getRealDisplayMetrics(context);
+ DisplayInfo display = getDisplayInfo(context);
- int width1 = metrics.widthPixels / 8;
- int width2 = metrics.widthPixels - width1;
- int height1 = metrics.heightPixels / 8;
- int height2 = metrics.heightPixels - height1;
+ int width1 = display.width / 8;
+ int width2 = display.width - width1;
+ int height1 = display.height / 8;
+ int height2 = display.height - height1;
return getActivityOptions(context, type).setLaunchBounds(new Rect(
width1,
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
private static Bundle launchMode2(Context context, int launchType, ApplicationType type) {
- DisplayMetrics metrics = getRealDisplayMetrics(context);
+ DisplayInfo display = getDisplayInfo(context);
int statusBarHeight = getStatusBarHeight(context);
String position = getTaskbarPosition(context);
int left = 0;
int top = statusBarHeight;
- int right = metrics.widthPixels;
- int bottom = metrics.heightPixels;
+ int right = display.width;
+ int bottom = display.height;
int iconSize = isOverridingFreeformHack(context) && !LauncherHelper.getInstance().isOnHomeScreen()
? 0
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
private static Bundle launchMode3(Context context, ApplicationType type) {
- DisplayMetrics metrics = getRealDisplayMetrics(context);
+ DisplayInfo display = getDisplayInfo(context);
- int width1 = metrics.widthPixels / 2;
+ int width1 = display.width / 2;
int width2 = context.getResources().getDimensionPixelSize(R.dimen.phone_size_width) / 2;
- int height1 = metrics.heightPixels / 2;
+ int height1 = display.height / 2;
int height2 = context.getResources().getDimensionPixelSize(R.dimen.phone_size_height) / 2;
return getActivityOptions(context, type).setLaunchBounds(new Rect(
@TargetApi(Build.VERSION_CODES.N)
public static void startActivityLowerRight(Context context, Intent intent) {
- DisplayMetrics metrics = getRealDisplayMetrics(context);
+ DisplayInfo display = getDisplayInfo(context);
try {
context.startActivity(intent,
getActivityOptions(context, ApplicationType.FREEFORM_HACK)
.setLaunchBounds(new Rect(
- metrics.widthPixels,
- metrics.heightPixels,
- metrics.widthPixels + 1,
- metrics.heightPixels + 1
+ display.width,
+ display.height,
+ display.width + 1,
+ display.height + 1
)).toBundle());
} catch (IllegalArgumentException | SecurityException e) { /* Gracefully fail */ }
}
@TargetApi(Build.VERSION_CODES.N)
public static void startTouchAbsorberActivity(Context context) {
String position = getTaskbarPosition(context);
- DisplayMetrics metrics = getRealDisplayMetrics(context);
+ DisplayInfo display = getDisplayInfo(context);
int left = 0;
int top = 0;
- int right = metrics.widthPixels;
- int bottom = metrics.heightPixels;
+ int right = display.width;
+ int bottom = display.height;
int iconSize = context.getResources().getDimensionPixelSize(R.dimen.icon_size);
} catch (IllegalArgumentException | SecurityException e) { /* Gracefully fail */ }
}
+ public static void startContextMenuActivity(Context context, Bundle args) {
+ SharedPreferences pref = getSharedPreferences(context);
+ Intent intent = null;
+
+ switch(pref.getString("theme", "light")) {
+ case "light":
+ intent = new Intent(context, ContextMenuActivity.class);
+ break;
+ case "dark":
+ intent = new Intent(context, ContextMenuActivityDark.class);
+ break;
+ }
+
+ if(intent != null) {
+ intent.putExtra("args", args);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+
+ if(hasFreeformSupport(context) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
+ DisplayInfo display = getDisplayInfo(context);
+
+ if(intent != null && hasBrokenSetLaunchBoundsApi())
+ intent.putExtra("context_menu_fix", true);
+
+ context.startActivity(intent,
+ getActivityOptions(context, ApplicationType.CONTEXT_MENU)
+ .setLaunchBounds(
+ new Rect(0, 0, display.width, display.height)
+ ).toBundle());
+ } else
+ context.startActivity(intent);
+ }
+
public static void checkForUpdates(Context context) {
String url;
if(isPlayStoreRelease(context))
private static int getMaxNumOfColumns(Context context) {
SharedPreferences pref = getSharedPreferences(context);
- DisplayMetrics metrics = getRealDisplayMetrics(context);
- float baseTaskbarSize = getBaseTaskbarSizeFloat(context) / metrics.density;
+ DisplayInfo display = getDisplayInfo(context);
+ float density = display.density / 160;
+ float baseTaskbarSize = getBaseTaskbarSizeFloat(context) / density;
int numOfColumns = 0;
float maxScreenSize = getTaskbarPosition(context).contains("vertical")
- ? (metrics.heightPixels - getStatusBarHeight(context)) / metrics.density
- : metrics.widthPixels / metrics.density;
+ ? (display.height - getStatusBarHeight(context)) / density
+ : display.width / density;
- float iconSize = context.getResources().getDimension(R.dimen.icon_size) / metrics.density;
+ float iconSize = context.getResources().getDimension(R.dimen.icon_size) / density;
int userMaxNumOfColumns = Integer.valueOf(pref.getString("max_num_of_recents", "10"));
}
public static int getStatusBarHeight(Context context) {
- int statusBarHeight = 0;
- int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ return getSystemDimen(context, "status_bar_height");
+ }
+
+ private static int getNavbarHeight(Context context) {
+ return getSystemDimen(context, "navigation_bar_height");
+ }
+
+ private static int getSystemDimen(Context context, String id) {
+ int value = 0;
+ int resourceId = context.getResources().getIdentifier(id, "dimen", "android");
if(resourceId > 0)
- statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
+ value = context.getResources().getDimensionPixelSize(resourceId);
- return statusBarHeight;
+ return value;
}
public static void refreshPinnedIcons(Context context) {
}
}
- public static DisplayMetrics getRealDisplayMetrics(Context context) {
- DisplayMetrics metrics = new DisplayMetrics();
+ public static DisplayInfo getDisplayInfo(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
- SharedPreferences pref = getSharedPreferences(context);
- if(isChromeOs(context) && !pref.getBoolean("chrome_os_context_menu_fix", true))
- disp.getRealMetrics(metrics);
- else
- disp.getMetrics(metrics);
+ DisplayMetrics metrics = new DisplayMetrics();
+ disp.getMetrics(metrics);
+
+ DisplayMetrics realMetrics = new DisplayMetrics();
+ disp.getRealMetrics(realMetrics);
+
+ DisplayInfo display = new DisplayInfo(metrics.widthPixels, metrics.heightPixels, metrics.densityDpi);
+
+ if(isChromeOs(context)) {
+ SharedPreferences pref = getSharedPreferences(context);
+ if(!pref.getBoolean("chrome_os_context_menu_fix", true)) {
+ display.width = realMetrics.widthPixels;
+ display.height = realMetrics.heightPixels;
+ }
+
+ return display;
+ }
+
+ boolean sameWidth = metrics.widthPixels == realMetrics.widthPixels;
+ boolean sameHeight = metrics.heightPixels == realMetrics.heightPixels;
+
+ if(sameWidth && !sameHeight) {
+ display.width = realMetrics.widthPixels;
+ display.height = realMetrics.heightPixels - getNavbarHeight(context);
+ }
+
+ if(!sameWidth && sameHeight) {
+ display.width = realMetrics.widthPixels - getNavbarHeight(context);
+ display.height = realMetrics.heightPixels;
+ }
- return metrics;
+ return display;
}
public static void pinAppShortcut(Context context) {