import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.provider.Settings;
+import android.view.Display;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.farmerbb.taskbar.activity.HSLActivity;
import com.farmerbb.taskbar.activity.HSLConfigActivity;
import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
+import com.farmerbb.taskbar.util.ApplicationType;
+import com.farmerbb.taskbar.util.LauncherHelper;
+import com.farmerbb.taskbar.util.TaskbarIntent;
import com.farmerbb.taskbar.util.U;
public class DesktopModeFragment extends SettingsFragment {
public boolean onPreferenceClick(final Preference p) {
switch(p.getKey()) {
case "desktop_mode":
- U.setComponentEnabled(getActivity(), SecondaryHomeActivity.class,
- ((CheckBoxPreference) p).isChecked());
+ boolean isChecked = ((CheckBoxPreference) p).isChecked();
- U.setComponentEnabled(getActivity(), HSLActivity.class,
- ((CheckBoxPreference) p).isChecked());
+ U.setComponentEnabled(getActivity(), SecondaryHomeActivity.class, isChecked);
+ U.setComponentEnabled(getActivity(), HSLActivity.class, isChecked);
+ startStopDesktopMode(isChecked);
- break;
+ break;
case "set_launcher_default":
try {
startActivity(new Intent(Settings.ACTION_HOME_SETTINGS));
return super.onPreferenceClick(p);
}
+
+ @TargetApi(29)
+ private void startStopDesktopMode(boolean start) {
+ if(!start) {
+ U.sendBroadcast(getActivity(), TaskbarIntent.ACTION_KILL_HOME_ACTIVITY);
+ return;
+ }
+
+ int displayId = U.getExternalDisplayID(getActivity());
+
+ LauncherHelper helper = LauncherHelper.getInstance();
+ if(displayId == Display.DEFAULT_DISPLAY || helper.isOnSecondaryHomeScreen()) return;
+
+ helper.setOnSecondaryHomeScreen(true, displayId);
+
+ Intent intent = new Intent(getActivity(), SecondaryHomeActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+
+ startActivity(intent, U.getActivityOptions(getActivity(), ApplicationType.APP_FULLSCREEN, null).toBundle());
+ }
}
\ No newline at end of file
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
-import android.hardware.display.DisplayManager;
import android.os.Build;
-import android.os.Handler;
import android.os.IBinder;
import android.service.quicksettings.TileService;
-import android.view.Display;
-
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import com.farmerbb.taskbar.activity.MainActivity;
-import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.util.TaskbarIntent;
-import com.farmerbb.taskbar.util.ApplicationType;
import com.farmerbb.taskbar.util.DependencyUtils;
import com.farmerbb.taskbar.util.IconCache;
-import com.farmerbb.taskbar.util.LauncherHelper;
import com.farmerbb.taskbar.util.U;
public class NotificationService extends Service {
private boolean isHidden = true;
- private boolean desktopModeStarted = false;
@Override
public IBinder onBind(Intent intent) {
}
};
- DisplayManager.DisplayListener listener = new DisplayManager.DisplayListener() {
- @Override
- public void onDisplayAdded(int displayId) {
- startDesktopMode(displayId, true);
- }
-
- @Override
- public void onDisplayChanged(int displayId) {}
-
- @Override
- public void onDisplayRemoved(int displayId) {
- stopDesktopMode();
- }
- };
-
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onCreate() {
registerReceiver(userForegroundReceiver, new IntentFilter(Intent.ACTION_USER_FOREGROUND));
registerReceiver(userBackgroundReceiver, new IntentFilter(Intent.ACTION_USER_BACKGROUND));
}
-
- if(U.shouldStartDesktopMode(this)) {
- startDesktopMode(U.getExternalDisplayID(this), false);
-
- DisplayManager manager = (DisplayManager) getSystemService(DISPLAY_SERVICE);
- manager.registerDisplayListener(listener, null);
- }
} else {
pref.edit().putBoolean("taskbar_active", false).apply();
unregisterReceiver(userForegroundReceiver);
unregisterReceiver(userBackgroundReceiver);
}
-
- if(desktopModeStarted) {
- DisplayManager manager = (DisplayManager) getSystemService(DISPLAY_SERVICE);
- manager.unregisterDisplayListener(listener);
-
- stopDesktopMode();
- }
- }
-
- private void startDesktopMode(int displayId, boolean shouldDelay) {
- LauncherHelper helper = LauncherHelper.getInstance();
- if(displayId == Display.DEFAULT_DISPLAY || helper.isOnSecondaryHomeScreen()) return;
-
- Runnable desktopModeLaunch = () -> {
- helper.setOnSecondaryHomeScreen(true, displayId);
-
- Intent intent = new Intent(this, SecondaryHomeActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- startActivity(intent, U.getActivityOptions(this, ApplicationType.APP_FULLSCREEN, null).toBundle());
- };
-
- if(shouldDelay)
- new Handler().postDelayed(desktopModeLaunch, 500);
- else
- desktopModeLaunch.run();
-
- desktopModeStarted = true;
- }
-
- private void stopDesktopMode() {
- U.sendBroadcast(this, TaskbarIntent.ACTION_KILL_HOME_ACTIVITY);
- desktopModeStarted = false;
}
}
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.activity.DashboardActivity;
+import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
import com.farmerbb.taskbar.activity.dark.DashboardActivityDark;
import com.farmerbb.taskbar.util.TaskbarIntent;
import com.farmerbb.taskbar.util.TaskbarPosition;
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_LEFT;
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_RIGHT;
-public class DashboardController implements UIController {
+public class DashboardController extends UIController {
private AppWidgetManager mAppWidgetManager;
private AppWidgetHost mAppWidgetHost;
- private Context context;
private LinearLayout layout;
private SparseArray<DashboardCell> cells = new SparseArray<>();
};
public DashboardController(Context context) {
- this.context = context;
+ super(context);
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onCreateHost(UIHost host) {
SharedPreferences pref = U.getSharedPreferences(context);
- if(pref.getBoolean("dashboard", context.getResources().getBoolean(R.bool.tb_def_dashboard))) {
- if(pref.getBoolean("taskbar_active", false) || LauncherHelper.getInstance().isOnHomeScreen()) {
- if(U.canDrawOverlays(context))
- drawDashboard(host);
- else {
- pref.edit().putBoolean("taskbar_active", false).apply();
-
- host.terminate();
- }
- } else host.terminate();
- } else host.terminate();
+ if(pref.getBoolean("dashboard", context.getResources().getBoolean(R.bool.tb_def_dashboard)))
+ init(context, host, () -> drawDashboard(host));
+ else
+ host.terminate();
}
@SuppressLint("RtlHardcoded")
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.activity.InvisibleActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityAlt;
+import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
import com.farmerbb.taskbar.adapter.StartMenuAdapter;
import com.farmerbb.taskbar.util.TaskbarIntent;
import com.farmerbb.taskbar.util.TaskbarPosition;
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_LEFT;
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_RIGHT;
-public class StartMenuController implements UIController {
+public class StartMenuController extends UIController {
- private Context context;
private StartMenuLayout layout;
private GridView startMenu;
private SearchView searchView;
};
public StartMenuController(Context context) {
- this.context = context;
+ super(context);
}
@TargetApi(Build.VERSION_CODES.M)
public void onCreateHost(UIHost host) {
hasHardwareKeyboard = context.getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS;
- SharedPreferences pref = U.getSharedPreferences(context);
- if(pref.getBoolean("taskbar_active", false) || LauncherHelper.getInstance().isOnHomeScreen()) {
- if(U.canDrawOverlays(context))
- drawStartMenu(host);
- else {
- pref.edit().putBoolean("taskbar_active", false).apply();
-
- host.terminate();
- }
- } else host.terminate();
+ init(context, host, () -> drawStartMenu(host));
}
@SuppressLint("RtlHardcoded")
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_LEFT;
import static com.farmerbb.taskbar.util.TaskbarPosition.POSITION_TOP_VERTICAL_RIGHT;
-public class TaskbarController implements UIController {
+public class TaskbarController extends UIController {
- private Context context;
private LinearLayout layout;
private ImageView startButton;
private LinearLayout taskbar;
};
public TaskbarController(Context context) {
- this.context = context;
+ super(context);
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onCreateHost(UIHost host) {
- SharedPreferences pref = U.getSharedPreferences(context);
- if(pref.getBoolean("taskbar_active", false) || LauncherHelper.getInstance().isOnHomeScreen()) {
- if(U.canDrawOverlays(context))
- drawTaskbar(host);
- else {
- pref.edit().putBoolean("taskbar_active", false).apply();
-
- host.terminate();
- }
- } else host.terminate();
+ init(context, host, () -> drawTaskbar(host));
}
@SuppressLint("RtlHardcoded")
package com.farmerbb.taskbar.ui;
-public interface UIController {
- void onCreateHost(UIHost host);
- void onRecreateHost(UIHost host);
- void onDestroyHost(UIHost host);
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
+import com.farmerbb.taskbar.util.LauncherHelper;
+import com.farmerbb.taskbar.util.U;
+
+public abstract class UIController {
+ protected Context context;
+
+ public UIController(Context context) {
+ this.context = context;
+ }
+
+ abstract void onCreateHost(UIHost host);
+ abstract void onRecreateHost(UIHost host);
+ abstract void onDestroyHost(UIHost host);
+
+ protected void init(Context context, UIHost host, Runnable runnable) {
+ SharedPreferences pref = U.getSharedPreferences(context);
+ LauncherHelper helper = LauncherHelper.getInstance();
+
+ boolean shouldProceed;
+ if(helper.isOnSecondaryHomeScreen())
+ shouldProceed = host instanceof SecondaryHomeActivity;
+ else
+ shouldProceed = true;
+
+ if(shouldProceed && (pref.getBoolean("taskbar_active", false)
+ || helper.isOnHomeScreen())) {
+ if(U.canDrawOverlays(context))
+ runnable.run();
+ else {
+ pref.edit().putBoolean("taskbar_active", false).apply();
+ host.terminate();
+ }
+ } else
+ host.terminate();
+ }
}
\ No newline at end of file
return;
}
- int displayID = getDisplayID();
+ int displayID = getTaskbarDisplayID();
int value = show ? 0 : getNavbarHeight(context) * -1;
if(hasWriteSecureSettingsPermission(context)) {
public static DisplayInfo getDisplayInfo(Context context, boolean fromTaskbar) {
context = context.getApplicationContext();
- int displayID = getDisplayID();
+ int displayID = getTaskbarDisplayID();
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display currentDisplay = null;
return info;
}
- private static int getDisplayID() {
+ private static int getTaskbarDisplayID() {
LauncherHelper helper = LauncherHelper.getInstance();
if(helper.isOnSecondaryHomeScreen())
&& !pref.getBoolean("launcher", false);
}
- // TODO remove this in favor of the existing getDisplayID method?
public static int getExternalDisplayID(Context context) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = dm.getDisplays();