From 1bc0981cb6eda63c9fedbe0663ddb1faf5060959 Mon Sep 17 00:00:00 2001 From: RikkaW Date: Tue, 30 Jul 2019 19:56:47 +0800 Subject: [PATCH] expandable start with adb/root card --- .../viewholder/StartAdbViewHolder.java | 43 ++++++++++++- .../viewholder/StartRootViewHolder.java | 40 +++++++++++- .../main/res/layout/item_home_start_adb.xml | 62 ++++++++++++------ .../main/res/layout/item_home_start_root.xml | 64 ++++++++++++------- manager/src/main/res/values/attrs.xml | 4 ++ manager/src/main/res/values/strings.xml | 1 - 6 files changed, 168 insertions(+), 46 deletions(-) diff --git a/manager/src/main/java/moe/shizuku/manager/viewholder/StartAdbViewHolder.java b/manager/src/main/java/moe/shizuku/manager/viewholder/StartAdbViewHolder.java index 9305c02e4..5cb3e15f1 100644 --- a/manager/src/main/java/moe/shizuku/manager/viewholder/StartAdbViewHolder.java +++ b/manager/src/main/java/moe/shizuku/manager/viewholder/StartAdbViewHolder.java @@ -4,23 +4,33 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.Checkable; import android.widget.Toast; import moe.shizuku.manager.Helps; import moe.shizuku.manager.R; import moe.shizuku.manager.ServerLauncher; +import moe.shizuku.manager.ShizukuManagerSettings; import moe.shizuku.manager.utils.CustomTabsHelper; +import moe.shizuku.manager.widget.ExpandableLayout; import moe.shizuku.support.recyclerview.BaseViewHolder; import moe.shizuku.support.text.HtmlCompat; import moe.shizuku.support.utils.ClipboardUtils; -public class StartAdbViewHolder extends BaseViewHolder { +public class StartAdbViewHolder extends BaseViewHolder implements View.OnClickListener, Checkable { public static final Creator CREATOR = (inflater, parent) -> new StartAdbViewHolder(inflater.inflate(R.layout.item_home_start_adb, parent, false)); + private Checkable expandableButton; + private ExpandableLayout expandableLayout; + public StartAdbViewHolder(View itemView) { super(itemView); + expandableButton = itemView.findViewById(android.R.id.text2); + ((View) expandableButton).setOnClickListener(this); + expandableLayout = itemView.findViewById(R.id.expandable); + itemView.findViewById(android.R.id.button1).setOnClickListener(v -> CustomTabsHelper.launchUrlOrCopy(v.getContext(), Helps.ADB.get())); itemView.findViewById(android.R.id.button2).setOnClickListener(v -> { @@ -44,4 +54,35 @@ public StartAdbViewHolder(View itemView) { .show(); }); } + + @Override + public void onClick(View v) { + setChecked(!isChecked()); + syncViewState(); + } + + @Override + public void onBind() { + syncViewState(); + } + + @Override + public void setChecked(boolean checked) { + ShizukuManagerSettings.getPreferences().edit().putBoolean("adb_help_expanded", checked).apply(); + } + + @Override + public boolean isChecked() { + return ShizukuManagerSettings.getPreferences().getBoolean("adb_help_expanded", true); + } + + @Override + public void toggle() { + setChecked(!isChecked()); + } + + private void syncViewState() { + expandableButton.setChecked(isChecked()); + expandableLayout.setExpanded(isChecked()); + } } \ No newline at end of file diff --git a/manager/src/main/java/moe/shizuku/manager/viewholder/StartRootViewHolder.java b/manager/src/main/java/moe/shizuku/manager/viewholder/StartRootViewHolder.java index 716e37c4e..df920e688 100644 --- a/manager/src/main/java/moe/shizuku/manager/viewholder/StartRootViewHolder.java +++ b/manager/src/main/java/moe/shizuku/manager/viewholder/StartRootViewHolder.java @@ -5,21 +5,27 @@ import android.content.Context; import android.text.method.LinkMovementMethod; import android.view.View; +import android.widget.Checkable; import android.widget.TextView; import androidx.core.app.ShareCompat; import moe.shizuku.manager.R; import moe.shizuku.manager.ServerLauncher; +import moe.shizuku.manager.ShizukuManagerSettings; import moe.shizuku.manager.service.ShellService; import moe.shizuku.manager.utils.BindServiceHelper; +import moe.shizuku.manager.widget.ExpandableLayout; import moe.shizuku.support.recyclerview.BaseViewHolder; import moe.shizuku.support.utils.ContextUtils; import moe.shizuku.support.widget.HtmlCompatTextView; -public class StartRootViewHolder extends BaseViewHolder { +public class StartRootViewHolder extends BaseViewHolder implements View.OnClickListener, Checkable { public static final Creator CREATOR = (inflater, parent) -> new StartRootViewHolder(inflater.inflate(R.layout.item_home_start_root, parent, false)); + private Checkable expandableButton; + private ExpandableLayout expandableLayout; + private View start; private View restart; @@ -30,6 +36,10 @@ public class StartRootViewHolder extends BaseViewHolder { public StartRootViewHolder(View itemView) { super(itemView); + expandableButton = itemView.findViewById(android.R.id.text2); + ((View) expandableButton).setOnClickListener(this); + expandableLayout = itemView.findViewById(R.id.expandable); + mBindServiceHelper = new BindServiceHelper(itemView.getContext(), ShellService.class); View.OnClickListener listener = this::onStartClicked; @@ -160,6 +170,8 @@ public void onBind() { start.setVisibility(View.VISIBLE); restart.setVisibility(View.GONE); } + + syncViewState(); } @Override @@ -168,4 +180,30 @@ public void onRecycle() { mAlertDialog = null; } + + @Override + public void onClick(View v) { + setChecked(!isChecked()); + syncViewState(); + } + + @Override + public void setChecked(boolean checked) { + ShizukuManagerSettings.getPreferences().edit().putBoolean("root_help_expanded", checked).apply(); + } + + @Override + public boolean isChecked() { + return ShizukuManagerSettings.getPreferences().getBoolean("root_help_expanded", true); + } + + @Override + public void toggle() { + setChecked(!isChecked()); + } + + private void syncViewState() { + expandableButton.setChecked(isChecked()); + expandableLayout.setExpanded(isChecked()); + } } \ No newline at end of file diff --git a/manager/src/main/res/layout/item_home_start_adb.xml b/manager/src/main/res/layout/item_home_start_adb.xml index 2cfd2bc07..cd7e3a97c 100644 --- a/manager/src/main/res/layout/item_home_start_adb.xml +++ b/manager/src/main/res/layout/item_home_start_adb.xml @@ -1,10 +1,10 @@ @@ -12,52 +12,72 @@ + android:paddingEnd="16dp"> + app:iconColorName="teal" /> + + - + android:layout_marginBottom="16dp" + app:isExpanded="true"> + + + + + android:text="@string/view_online_help" /> + android:text="@string/view_command" /> \ No newline at end of file diff --git a/manager/src/main/res/layout/item_home_start_root.xml b/manager/src/main/res/layout/item_home_start_root.xml index 860fc7e10..f227c2407 100644 --- a/manager/src/main/res/layout/item_home_start_root.xml +++ b/manager/src/main/res/layout/item_home_start_root.xml @@ -1,10 +1,10 @@ @@ -12,55 +12,75 @@ + android:paddingEnd="16dp"> + app:iconColorName="orange" /> + + - + android:layout_marginBottom="16dp" + app:isExpanded="true"> + + + + + android:drawableStart="@drawable/ic_server_start_24dp" + android:enabled="false" + android:text="@string/service_start" /> diff --git a/manager/src/main/res/values/attrs.xml b/manager/src/main/res/values/attrs.xml index b1349ba13..2e5945aca 100644 --- a/manager/src/main/res/values/attrs.xml +++ b/manager/src/main/res/values/attrs.xml @@ -9,4 +9,8 @@ + + + + \ No newline at end of file diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml index 81765271d..1ea56cec9 100644 --- a/manager/src/main/res/values/strings.xml +++ b/manager/src/main/res/values/strings.xml @@ -73,5 +73,4 @@ Can\'t start browser %s has been copied to clipboard.]]> View apps using Shizuku -