From a474eafe84f1943cea102e8fd532f4f178c4244c Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sat, 7 Jan 2017 02:46:50 +0800 Subject: [PATCH] Improve installation UI and dialog --- .../com/topjohnwu/magisk/InstallFragment.java | 4 +- .../com/topjohnwu/magisk/MainActivity.java | 2 +- .../com/topjohnwu/magisk/StatusFragment.java | 45 ++++++++++++++++--- .../com/topjohnwu/magisk/utils/Async.java | 4 +- app/src/main/res/layout/install_fragment.xml | 30 ++++++++++--- app/src/main/res/values/strings.xml | 6 ++- 6 files changed, 73 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/InstallFragment.java b/app/src/main/java/com/topjohnwu/magisk/InstallFragment.java index 902eba7f8..f93a2cd93 100644 --- a/app/src/main/java/com/topjohnwu/magisk/InstallFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/InstallFragment.java @@ -30,6 +30,7 @@ public class InstallFragment extends Fragment implements CallbackHandler.EventLi public static List blockList; public static String bootBlock = null; + @BindView(R.id.current_version_title) TextView currentVersionTitle; @BindView(R.id.install_title) TextView installTitle; @BindView(R.id.block_spinner) Spinner spinner; @BindView(R.id.detect_bootimage) Button detectButton; @@ -43,13 +44,14 @@ public class InstallFragment extends Fragment implements CallbackHandler.EventLi View v = inflater.inflate(R.layout.install_fragment, container, false); ButterKnife.bind(this, v); detectButton.setOnClickListener(v1 -> toAutoDetect()); + currentVersionTitle.setText(getString(R.string.current_magisk_title, StatusFragment.magiskVersionString)); installTitle.setText(getString(R.string.install_magisk_title, StatusFragment.remoteMagiskVersion)); flashButton.setOnClickListener(v1 -> { String bootImage = bootBlock; if (bootImage == null) { bootImage = blockList.get(spinner.getSelectedItemPosition() - 1); } - String filename = "Magisk-v" + String.valueOf(StatusFragment.remoteMagiskVersion) + ".zip"; + String filename = "Magisk-v" + StatusFragment.remoteMagiskVersion + ".zip"; String finalBootImage = bootImage; MainActivity.alertBuilder .setTitle(getString(R.string.repo_install_title, getString(R.string.magisk))) diff --git a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java index 20cdb11cf..ddae5aceb 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java @@ -1,6 +1,7 @@ package com.topjohnwu.magisk; import android.Manifest; +import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Intent; @@ -17,7 +18,6 @@ import android.support.v4.app.ActivityCompat; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; diff --git a/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java b/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java index a0fadac01..3230a043e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java @@ -1,7 +1,12 @@ package com.topjohnwu.magisk; +import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentTransaction; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; @@ -26,9 +31,11 @@ import butterknife.ButterKnife; public class StatusFragment extends Fragment implements CallbackHandler.EventListener { public static double magiskVersion, remoteMagiskVersion = -1; - public static String magiskVersionString, magiskLink, magiskChangelog; + public static String magiskVersionString = "(none)", magiskLink, releaseNoteLink; public static int SNCheckResult = -1; + private static boolean noDialog = false; + public static final CallbackHandler.Event updateCheckDone = new CallbackHandler.Event(); public static final CallbackHandler.Event safetyNetDone = new CallbackHandler.Event(); @@ -62,6 +69,8 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis checkMagiskInfo(); } + private AlertDialog updateMagisk; + @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -84,13 +93,12 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis safetyNetStatusText.setTextColor(defaultColor); safetyNetDone.isTriggered = false; + noDialog = false; updateUI(); new Async.CheckUpdates().exec(); }); - updateUI(); - safetyNetContainer.setOnClickListener(view -> { safetyNetProgress.setVisibility(View.VISIBLE); safetyNetContainer.setBackgroundColor(trans); @@ -99,7 +107,7 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis Async.checkSafetyNet(getActivity()); }); - if (magiskVersion < 0 && Shell.rootAccess()) { + if (magiskVersion < 0 && Shell.rootAccess() && !noDialog) { MainActivity.alertBuilder .setTitle(R.string.no_magisk_title) .setMessage(R.string.no_magisk_msg) @@ -112,10 +120,12 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit(); } catch (IllegalStateException ignored) {} }) - .setNegativeButton(R.string.no_thanks, null) + .setNegativeButton(R.string.no_thanks, (dialogInterface, i) -> noDialog = true) .show(); } + updateUI(); + return v; } @@ -229,6 +239,31 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis magiskCheckUpdatesProgress.setVisibility(View.GONE); mSwipeRefreshLayout.setRefreshing(false); + + updateMagisk = MainActivity.alertBuilder + .setTitle(R.string.magisk_update_title) + .setMessage(getString(R.string.magisk_update_message, remoteMagiskVersion)) + .setCancelable(true) + .setPositiveButton(R.string.goto_install, (dialogInterface, i) -> { + ((MainActivity) getActivity()).navigationView.setCheckedItem(R.id.install); + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); + try { + transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit(); + } catch (IllegalStateException ignored) {} + }) + .setNeutralButton(R.string.check_release_notes, (dialog, which) -> { + getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(releaseNoteLink))); + }) + .setNegativeButton(R.string.no_thanks, (dialogInterface, i) -> noDialog = true) + .create(); + + if (magiskVersion < remoteMagiskVersion && Shell.rootAccess()) { + magiskStatusContainer.setOnClickListener(view -> updateMagisk.show()); + if (!noDialog) { + updateMagisk.show(); + } + } } private void updateSafetyNetUI() { diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/Async.java b/app/src/main/java/com/topjohnwu/magisk/utils/Async.java index 21438d81a..8b3bed545 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/Async.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/Async.java @@ -59,12 +59,10 @@ public class Async { String jsonStr = WebRequest.makeWebServiceCall(UPDATE_JSON, WebRequest.GET); try { JSONObject json = new JSONObject(jsonStr); - JSONObject magisk = json.getJSONObject("magisk"); - StatusFragment.remoteMagiskVersion = magisk.getDouble("versionCode"); StatusFragment.magiskLink = magisk.getString("link"); - StatusFragment.magiskChangelog = magisk.getString("changelog"); + StatusFragment.releaseNoteLink = magisk.getString("note"); } catch (JSONException ignored) {} return null; } diff --git a/app/src/main/res/layout/install_fragment.xml b/app/src/main/res/layout/install_fragment.xml index ccc4667de..1348d3de6 100644 --- a/app/src/main/res/layout/install_fragment.xml +++ b/app/src/main/res/layout/install_fragment.xml @@ -17,14 +17,30 @@ style="?attr/cardStyle" app:cardUseCompatPadding="true"> - + android:layout_height="match_parent" + android:padding="15dp"> + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f16d9c1a1..bdb08f4a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,7 +41,8 @@ Advanced Settings Keep force encryption Keep dm-verity - Install Magisk Version: v%1$.1f + Installed Magisk Version: v%1$s + Latest Magisk Version: v%1$.1f Magiskify @@ -105,6 +106,9 @@ No Magisk Installed! Do you want to download and install Magisk? Downloading %1$s + New Magisk Update Available! + Magisk v%1$.1f update is live, do you want to install? + Check release notes https://api.github.com/orgs/Magisk-Modules-Repo/repos?access_token=%1$s