Update Install Fragment UI

This commit is contained in:
topjohnwu
2016-12-25 22:36:51 +08:00
parent 8fe4cfecb6
commit c78209604c
14 changed files with 217 additions and 171 deletions

View File

@ -1,10 +1,8 @@
package com.topjohnwu.magisk;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -13,22 +11,21 @@ import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import com.topjohnwu.magisk.receivers.DownloadReceiver;
import com.topjohnwu.magisk.utils.Async;
import com.topjohnwu.magisk.utils.Shell;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.magisk.utils.ZipUtils;
import com.topjohnwu.magisk.utils.CallbackHandler;
import java.io.File;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class InstallFragment extends Fragment {
public class InstallFragment extends Fragment implements CallbackHandler.EventListener {
private List<String> blockList;
public static final CallbackHandler.Event blockDetectionDone = new CallbackHandler.Event();
public static List<String> blockList;
public static String bootBlock = null;
@BindView(R.id.install_title) TextView installTitle;
@BindView(R.id.block_spinner) Spinner spinner;
@BindView(R.id.detect_bootimage) Button detectButton;
@ -37,56 +34,46 @@ public class InstallFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.install_fragment, container, false);
ButterKnife.bind(this, v);
detectButton.setOnClickListener(v1 -> detectBootImage());
getBlockList();
detectButton.setOnClickListener(v1 -> toAutoDetect());
installTitle.setText(getString(R.string.install_magisk_title, StatusFragment.remoteMagiskVersion));
if (blockDetectionDone.isTriggered) {
updateUI();
}
return v;
}
private void getBlockList() {
new Async.RootTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
blockList = Utils.getBlockList();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, blockList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
detectBootImage();
}
}.exec();
@Override
public void onTrigger(CallbackHandler.Event event) {
updateUI();
}
private void detectBootImage() {
new Async.RootTask<Void, Void, Void>() {
String boot;
@Override
protected Void doInBackground(Void... params) {
boot = Utils.detectBootImage();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
if (boot != null) {
int idx = blockList.indexOf(boot);
if (idx != -1) {
spinner.setSelection(idx);
}
}
}
}.exec();
private void updateUI() {
blockList.add(0, getString(R.string.auto_detect, bootBlock));
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_item, blockList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
toAutoDetect();
}
private void toAutoDetect() {
if (bootBlock != null) {
spinner.setSelection(0);
}
}
@Override
public void onResume() {
super.onResume();
getActivity().setTitle(R.string.install);
CallbackHandler.register(blockDetectionDone, this);
}
@Override
public void onDestroy() {
super.onDestroy();
CallbackHandler.unRegister(blockDetectionDone, this);
}
}
// private AlertDialog.OnClickListener flashMagisk = (dialogInterface, i) -> Utils.dlAndReceive(

View File

@ -4,10 +4,12 @@ import android.Manifest;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
@ -22,16 +24,19 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.topjohnwu.magisk.utils.CallbackHandler;
import com.topjohnwu.magisk.utils.Logger;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, CallbackHandler.EventListener {
private static final String SELECTED_ITEM_ID = "SELECTED_ITEM_ID";
private final Handler mDrawerHandler = new Handler();
private SharedPreferences prefs;
@BindView(R.id.toolbar) Toolbar toolbar;
@BindView(R.id.drawer_layout) DrawerLayout drawer;
@ -43,7 +48,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override
protected void onCreate(final Bundle savedInstanceState) {
String theme = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("theme", "");
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String theme = prefs.getString("theme", "");
Logger.dev("MainActivity: Theme is " + theme);
if (theme.equals("Dark")) {
setTheme(R.style.AppTheme_dh);
@ -85,14 +92,25 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
}
navigationView.setNavigationItemSelectedListener(this);
if (StatusFragment.updateCheckDone.isTriggered) {
onTrigger(StatusFragment.updateCheckDone);
}
}
@Override
protected void onResume() {
super.onResume();
CallbackHandler.register(StatusFragment.updateCheckDone, this);
checkHideSection();
}
@Override
protected void onDestroy() {
super.onDestroy();
CallbackHandler.unRegister(StatusFragment.updateCheckDone, this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@ -117,17 +135,26 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
return true;
}
@Override
public void onTrigger(CallbackHandler.Event event) {
Menu menu = navigationView.getMenu();
if (StatusFragment.remoteMagiskVersion < 0) {
menu.findItem(R.id.install).setVisible(false);
} else {
menu.findItem(R.id.install).setVisible(true);
}
}
private void checkHideSection() {
Menu menu = navigationView.getMenu();
if (StatusFragment.magiskVersion == -1) {
if (StatusFragment.magiskVersion < 0) {
menu.findItem(R.id.magiskhide).setVisible(false);
menu.findItem(R.id.modules).setVisible(false);
menu.findItem(R.id.downloads).setVisible(false);
} else {
menu.findItem(R.id.modules).setVisible(true);
menu.findItem(R.id.downloads).setVisible(true);
menu.findItem(R.id.magiskhide).setVisible(
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("magiskhide", false));
menu.findItem(R.id.magiskhide).setVisible(prefs.getBoolean("magiskhide", false));
}
}

View File

@ -31,6 +31,8 @@ public class SplashActivity extends AppCompatActivity {
.putBoolean("hosts", Utils.itemExist(false, "/magisk/.core/hosts"))
.apply();
// Start all async tasks
new Async.GetBootBlocks().exec();
new Async.CheckUpdates().exec();
Async.checkSafetyNet(getApplicationContext());
new Async.LoadModules() {
@ -38,12 +40,12 @@ public class SplashActivity extends AppCompatActivity {
protected void onPostExecute(Void v) {
super.onPostExecute(v);
new Async.LoadRepos(getApplicationContext()).exec();
// Start main activity
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}.exec();
// Start main activity
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}

View File

@ -62,6 +62,10 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis
private AlertDialog.Builder builder;
static {
checkMagiskInfo();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -147,13 +151,10 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis
CallbackHandler.unRegister(safetyNetDone, this);
}
private void updateUI() {
int image, color;
private static void checkMagiskInfo() {
List<String> ret = Shell.sh("getprop magisk.version");
if (ret.get(0).length() == 0) {
magiskVersion = -1;
magiskVersionText.setText(R.string.magisk_version_error);
} else {
try {
magiskVersionString = ret.get(0);
@ -162,6 +163,17 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis
// Custom version don't need to receive updates
magiskVersion = Double.POSITIVE_INFINITY;
}
}
}
private void updateUI() {
int image, color;
checkMagiskInfo();
if (magiskVersion < 0) {
magiskVersionText.setText(R.string.magisk_version_error);
} else {
magiskVersionText.setText(getString(R.string.magisk_version, magiskVersionString));
}
@ -199,7 +211,7 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis
} else if (remoteMagiskVersion > magiskVersion) {
color = colorInfo;
image = R.drawable.ic_update;
magiskUpdateText.setText(getString(R.string.magisk_update_available, String.valueOf(remoteMagiskVersion)));
magiskUpdateText.setText(getString(R.string.magisk_update_available, remoteMagiskVersion));
} else {
color = colorOK;
image = R.drawable.ic_check_circle;

View File

@ -12,6 +12,7 @@ import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.widget.Toast;
import com.topjohnwu.magisk.InstallFragment;
import com.topjohnwu.magisk.ModulesFragment;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.ReposFragment;
@ -293,4 +294,20 @@ public class Async {
}
}
public static class GetBootBlocks extends RootTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
InstallFragment.blockList = Shell.su("ls /dev/block | grep mmc");
if (InstallFragment.bootBlock == null) {
InstallFragment.bootBlock = Utils.detectBootImage();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
InstallFragment.blockDetectionDone.trigger();
}
}
}

View File

@ -138,10 +138,6 @@ public class Utils {
.replace("#", "").replace("@", "").replace("*", "");
}
public static List<String> getBlockList() {
return Shell.su("ls /dev/block | grep mmc");
}
public static String detectBootImage() {
String[] commands = {
"for PARTITION in kern-a KERN-A android_boot ANDROID_BOOT kernel KERNEL boot BOOT lnx LNX; do",