From 93396eff44f1d50933b9420b96f41ef612a1b22c Mon Sep 17 00:00:00 2001 From: artdeell Date: Wed, 9 Nov 2022 22:34:49 +0300 Subject: [PATCH] VUI fixes & improvements pt. 1 Re-enabled multi-process and fixed controls notch offset in multi-process Used ThreadPoolExecutor for task execution with 0 starting threads Used translation strings instead of hardcoded strings Added terminate button for lazy service Added arrow for tasks list --- .../src/main/AndroidManifest.xml | 2 + .../java/com/kdt/mcgui/ProgressLayout.java | 11 ++--- .../net/kdt/pojavlaunch/LauncherActivity.java | 5 +-- .../net/kdt/pojavlaunch/MainActivity.java | 44 +++++++++++-------- .../net/kdt/pojavlaunch/PojavApplication.java | 6 ++- .../handleview/AddSubButton.java | 2 +- .../handleview/CloneButton.java | 3 +- .../handleview/DeleteButton.java | 3 +- .../kdt/pojavlaunch/services/LazyService.java | 26 ++++++----- .../src/main/res/layout/view_progress.xml | 14 ++++-- .../src/main/res/values/strings.xml | 2 + 11 files changed, 72 insertions(+), 46 deletions(-) diff --git a/app_pojavlauncher/src/main/AndroidManifest.xml b/app_pojavlauncher/src/main/AndroidManifest.xml index 9ab972093..7f61197c2 100644 --- a/app_pojavlauncher/src/main/AndroidManifest.xml +++ b/app_pojavlauncher/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" + android:process=":launcher" android:resizeableActivity="true" android:hasFragileUserData="true" android:allowNativeHeapPointerTagging="false"> @@ -80,6 +81,7 @@ android:configChanges="keyboardHidden|orientation|screenSize|keyboard|navigation"/> mMap = new ArrayMap<>(); private LinearLayout mLinearLayout; private TextView mTaskNumberDisplayer; + private ImageView mFlipArrow; private final Runnable mCheckProgressRunnable = new Runnable() { @Override public void run() { @@ -100,7 +100,7 @@ public class ProgressLayout extends ConstraintLayout implements View.OnClickList setVisibility(hasProcesses() ? VISIBLE : GONE); - mTaskNumberDisplayer.setText(mActiveProcesses + " tasks in progress"); + mTaskNumberDisplayer.setText(getContext().getString(R.string.progresslayout_tasks_in_progress, mActiveProcesses)); postDelayed(this, 1000); } }; @@ -123,6 +123,7 @@ public class ProgressLayout extends ConstraintLayout implements View.OnClickList inflate(getContext(), R.layout.view_progress, this); mLinearLayout = findViewById(R.id.progress_linear_layout); mTaskNumberDisplayer = findViewById(R.id.progress_textview); + mFlipArrow = findViewById(R.id.progress_flip_arrow); postDelayed(mCheckProgressRunnable, 1000); setBackgroundColor(getResources().getColor(R.color.background_bottom_bar)); @@ -159,6 +160,6 @@ public class ProgressLayout extends ConstraintLayout implements View.OnClickList @Override public void onClick(View v) { mLinearLayout.setVisibility(mLinearLayout.getVisibility() == GONE ? VISIBLE : GONE); + mFlipArrow.setRotation(mLinearLayout.getVisibility() == GONE? 0 : 180); } - } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java index c05f5fe79..56f19971c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java @@ -134,11 +134,10 @@ public class LauncherActivity extends BaseActivity { try { Intent mainIntent = new Intent(getBaseContext(), MainActivity.class); mainIntent.putExtra(INTENT_MINECRAFT_VERSION, mcVersion.id); - mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - mainIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + mainIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(mainIntent); finish(); - Log.i("ActCheck","mainActivity finishing=" + isFinishing() + ", destroyed=" + isDestroyed()); + android.os.Process.killProcess(android.os.Process.myPid()); //You should kill yourself, NOW! } catch (Throwable e) { Tools.showError(getBaseContext(), e); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index e36d8a0cf..2fe3d526a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -101,25 +101,7 @@ public class MainActivity extends BaseActivity { // Recompute the gui scale when options are changed MCOptionUtils.MCOptionListener optionListener = MCOptionUtils::getMcScale; MCOptionUtils.addMCOptionListener(optionListener); - - try { - // Load keys - mControlLayout.loadLayout( - minecraftProfile.controlFile == null - ? LauncherPreferences.PREF_DEFAULTCTRL_PATH - : Tools.CTRLMAP_PATH + minecraftProfile.controlFile); - } catch(IOException e) { - try { - Log.w("MainActivity", "Unable to load the control file, loading the default now"); - mControlLayout.loadLayout(Tools.CTRLDEF_FILE); - } catch (IOException ioException) { - Tools.showError(this, ioException); - } - } catch (Throwable th) { - Tools.showError(this, th); - } mControlLayout.setModifiable(false); - mControlLayout.toggleControlVisible(); } protected void initLayout(int resId) { @@ -202,6 +184,32 @@ public class MainActivity extends BaseActivity { } } + private void loadControls() { + try { + // Load keys + mControlLayout.loadLayout( + minecraftProfile.controlFile == null + ? LauncherPreferences.PREF_DEFAULTCTRL_PATH + : Tools.CTRLMAP_PATH + minecraftProfile.controlFile); + } catch(IOException e) { + try { + Log.w("MainActivity", "Unable to load the control file, loading the default now"); + mControlLayout.loadLayout(Tools.CTRLDEF_FILE); + } catch (IOException ioException) { + Tools.showError(this, ioException); + } + } catch (Throwable th) { + Tools.showError(this, th); + } + mControlLayout.toggleControlVisible(); + } + + @Override + public void onAttachedToWindow() { + LauncherPreferences.computeNotchSize(this); + loadControls(); + } + /** Boilerplate binding */ private void bindValues(){ mControlLayout = findViewById(R.id.main_control_layout); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavApplication.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavApplication.java index 165580b89..bf2e02505 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavApplication.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavApplication.java @@ -12,13 +12,15 @@ import java.io.*; import java.text.*; import java.util.*; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import net.kdt.pojavlaunch.utils.*; public class PojavApplication extends Application { public static String CRASH_REPORT_TAG = "PojavCrashReport"; - public static ExecutorService sExecutorService = Executors.newFixedThreadPool(4); + public static ExecutorService sExecutorService = new ThreadPoolExecutor(0, 4, 500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); @Override public void onCreate() { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/AddSubButton.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/AddSubButton.java index 5a00c4e65..40d57fd51 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/AddSubButton.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/AddSubButton.java @@ -21,7 +21,7 @@ public class AddSubButton extends Button implements ActionButtonInterface { public AddSubButton(Context context, @Nullable AttributeSet attrs) {super(context, attrs); init();} public void init() { - setText("Add Button"); + setText(R.string.customctrl_addsubbutton); setOnClickListener(this); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/CloneButton.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/CloneButton.java index b7b8b9b30..dc3e51e00 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/CloneButton.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/CloneButton.java @@ -22,7 +22,8 @@ public class CloneButton extends Button implements ActionButtonInterface { public void init() { setOnClickListener(this); - setText("CLONE"); + setAllCaps(true); + setText(R.string.global_clone); } private ControlInterface mCurrentlySelectedButton = null; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/DeleteButton.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/DeleteButton.java index 677ada93e..e4950c993 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/DeleteButton.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/DeleteButton.java @@ -21,7 +21,8 @@ public class DeleteButton extends Button implements ActionButtonInterface { public void init() { setOnClickListener(this); - setText("DELETE"); + setAllCaps(true); + setText(R.string.global_delete); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/services/LazyService.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/services/LazyService.java index 5eb97d131..f0347ee52 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/services/LazyService.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/services/LazyService.java @@ -1,12 +1,15 @@ package net.kdt.pojavlaunch.services; +import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.IBinder; +import android.os.Process; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -27,15 +30,9 @@ public class LazyService extends Service { private static WeakReference sLazyService = new WeakReference<>(null); - /** Simple wrappers to start the service */ + /** Simple wrapper to start the service */ public static void startService(Context context){ - startService(context, R.string.lazy_service_default_title, R.string.lazy_service_default_description); - } - - public static void startService(Context context, int titleID, int descriptionID){ Intent intent = new Intent(context, LazyService.class); - intent.putExtra(NOTIF_TITLE, titleID); - intent.putExtra(NOTIF_DESC, descriptionID); ContextCompat.startForegroundService(context, intent); } @@ -55,14 +52,19 @@ public class LazyService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { + if(intent.getBooleanExtra("kill", false)) { + Process.killProcess(Process.myPid()); + return super.onStartCommand(intent, flags, startId); + } buildNotificationChannel(); - //TODO custom strings ? + Intent killIntent = new Intent(getApplicationContext(), LazyService.class); + killIntent.putExtra("kill", true); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id") - .setContentTitle(getString(intent.getIntExtra(NOTIF_TITLE, R.string.lazy_service_default_title))) - .setContentText(getString(intent.getIntExtra(NOTIF_DESC ,R.string.lazy_service_default_description))) + .setContentTitle(getString(R.string.lazy_service_default_title)) + .setContentText(getString(R.string.lazy_service_default_description)) + .addAction(android.R.drawable.ic_menu_close_clear_cancel, getString(R.string.notification_terminate), PendingIntent.getService(this, 0, killIntent, Build.VERSION.SDK_INT >=23 ? PendingIntent.FLAG_IMMUTABLE : 0)) .setSmallIcon(R.mipmap.ic_launcher_round); - - startForeground(1, builder.build()); + startForeground(1,builder.build()); return super.onStartCommand(intent, flags, startId); } diff --git a/app_pojavlauncher/src/main/res/layout/view_progress.xml b/app_pojavlauncher/src/main/res/layout/view_progress.xml index 5cff3b72b..767ac4209 100644 --- a/app_pojavlauncher/src/main/res/layout/view_progress.xml +++ b/app_pojavlauncher/src/main/res/layout/view_progress.xml @@ -30,11 +30,21 @@ tools:text="5 tasks in progress" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@id/progress_flip_arrow" app:layout_constraintStart_toEndOf="@+id/progress_generic_progressbar" app:layout_constraintTop_toTopOf="@+id/progress_generic_progressbar" tools:ignore="RtlSymmetry" /> + + - - \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 31009a2de..e47dda026 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -309,4 +309,6 @@ Installed (Use global default) Default control + %d tasks in progress + Terminate