Fix UI refreshes

This commit is contained in:
topjohnwu
2016-09-26 10:45:34 +08:00
parent 6692b618ea
commit 91d3d2ad1f
13 changed files with 230 additions and 220 deletions

View File

@@ -55,21 +55,21 @@ public class ReposFragment extends Fragment {
mView = view;
ButterKnife.bind(this, view);
swipeRefreshLayout.setOnRefreshListener(() -> {
this.LoadRepo(true);
new Async.LoadRepos(getActivity()).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
new UpdateUI().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
ignoreAlertUpdate = false;
});
LoadRepo(false);
//LoadRepo(false);
new UpdateUI().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
setHasOptionsMenu(false);
alertUpdate = false;
if (mListRepos.size() == 0) {
emptyTv.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
return view;
}
CheckForUpdates();
Log.d("Magisk", "ReposFragment: ListRepos size is " + listRepos().size());
recyclerView.setAdapter(new ReposAdapter(this, mListRepos));
// if (mListRepos.size() == 0) {
// emptyTv.setVisibility(View.VISIBLE);
// recyclerView.setVisibility(View.GONE);
// return view;
// }
//CheckForUpdates();
//recyclerView.setAdapter(new ReposAdapter(this, mListRepos));
return view;
}
@@ -89,96 +89,117 @@ public class ReposFragment extends Fragment {
super.onAttachFragment(childFragment);
}
private void LoadRepo(boolean doReload) {
RepoHelper.TaskDelegate taskDelegate = result -> {
if (result.equals("Complete")) {
Log.d("Magisk", "ReposFragment, got delegate");
UpdateUI();
if (mView != null) {
mView.invalidate();
mView.requestLayout();
}
// private void LoadRepo(boolean doReload) {
// RepoHelper.TaskDelegate taskDelegate = result -> {
// if (result.equals("Complete")) {
// Log.d("Magisk", "ReposFragment, got delegate");
// UpdateUI();
// if (mView != null) {
// mView.invalidate();
// mView.requestLayout();
// }
//
// }
//
// };
// Log.d("Magisk", "ReposFragment, LoadRepo called");
// new Async.LoadRepos(getActivity());
// }
}
};
Log.d("Magisk", "ReposFragment, LoadRepo called");
new Async.LoadRepos(getActivity());
}
private void NotifyOfAlerts() {
if (alertUpdate && !ignoreAlertUpdate) {
Iterator<Repo> iterRepo = mListReposToUpdate.iterator();
while (iterRepo.hasNext()) {
Repo repo = iterRepo.next();
DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
Utils.DownloadReceiver receiver = new Utils.DownloadReceiver() {
@Override
public void task(File file) {
Log.d("Magisk", "Task firing");
new Async.FlashZIP(getActivity(), repo.getId(), file.toString()).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
}
};
String filename = repo.getId().replace(" ", "") + ".zip";
Utils.downloadAndReceive(getActivity(), receiver, repo.getZipUrl(), filename);
break;
case DialogInterface.BUTTON_NEGATIVE:
// ignoreAlertUpdate = true;
// SharedPreferences.Editor editor = prefs.edit();
// editor.putBoolean("ignoreUpdateAlerts", ignoreAlertUpdate);
// editor.apply();
break;
}
};
String theme = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("theme", "");
Logger.dh("ReposFragment: Theme is " + theme);
if (theme.equals("Dark")) {
builder = new AlertDialog.Builder(getActivity(),R.style.AlertDialog_dh);
} else {
builder = new AlertDialog.Builder(getActivity());
}
builder.setMessage("An update is available for " + repo.getName() + ". Would you like to install it?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
iterRepo.remove();
}
}
}
// private void NotifyOfAlerts() {
// if (alertUpdate && !ignoreAlertUpdate) {
// Iterator<Repo> iterRepo = mListReposToUpdate.iterator();
// while (iterRepo.hasNext()) {
// Repo repo = iterRepo.next();
// DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
// switch (which) {
// case DialogInterface.BUTTON_POSITIVE:
// Utils.DownloadReceiver receiver = new Utils.DownloadReceiver() {
// @Override
// public void task(File file) {
// Log.d("Magisk", "Task firing");
// new Async.FlashZIP(getActivity(), repo.getId(), file.toString()).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
// }
// };
// String filename = repo.getId().replace(" ", "") + ".zip";
// Utils.downloadAndReceive(getActivity(), receiver, repo.getZipUrl(), filename);
//
// break;
//
// case DialogInterface.BUTTON_NEGATIVE:
//// ignoreAlertUpdate = true;
//// SharedPreferences.Editor editor = prefs.edit();
//// editor.putBoolean("ignoreUpdateAlerts", ignoreAlertUpdate);
//// editor.apply();
// break;
// }
// };
//
// String theme = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("theme", "");
// Logger.dh("ReposFragment: Theme is " + theme);
// if (theme.equals("Dark")) {
// builder = new AlertDialog.Builder(getActivity(),R.style.AlertDialog_dh);
// } else {
// builder = new AlertDialog.Builder(getActivity());
// }
// builder.setMessage("An update is available for " + repo.getName() + ". Would you like to install it?").setPositiveButton("Yes", dialogClickListener)
// .setNegativeButton("No", dialogClickListener).show();
// iterRepo.remove();
//
// }
//
// }
// }
@Override
public void onResume() {
super.onResume();
LoadRepo(false);
//LoadRepo(false);
getActivity().setTitle("Magisk");
}
private class UpdateUI extends AsyncTask<Void, Void, Void> {
protected List<Repo> listRepos() {
return mListRepos;
}
private void UpdateUI() {
Log.d("Magisk", "ReposFragment: UpdateUI Called, size is " + listRepos().size());
if (listRepos().size() == 0) {
emptyTv.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
}
Log.d("Magisk", "ReposFragment: ListRepos size is " + listRepos().size());
recyclerView.setAdapter(new ReposAdapter(this, listRepos()));
if (swipeRefreshLayout.isRefreshing()) {
swipeRefreshLayout.setRefreshing(false);
CheckForUpdates();
//NotifyOfAlerts();
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
if (mListRepos.size() == 0) {
emptyTv.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
}
Log.d("Magisk", "ReposFragment: ListRepos size is " + mListRepos.size());
recyclerView.setAdapter(new ReposAdapter(mListRepos));
if (swipeRefreshLayout.isRefreshing()) {
swipeRefreshLayout.setRefreshing(false);
//CheckForUpdates();
//NotifyOfAlerts();
}
}
}
// private void UpdateUI() {
// Log.d("Magisk", "ReposFragment: UpdateUI Called, size is " + mListRepos.size());
//
// if (mListRepos.size() == 0) {
// emptyTv.setVisibility(View.VISIBLE);
// recyclerView.setVisibility(View.GONE);
//
// }
// Log.d("Magisk", "ReposFragment: ListRepos size is " + mListRepos.size());
// recyclerView.setAdapter(new ReposAdapter(this, mListRepos));
// if (swipeRefreshLayout.isRefreshing()) {
// swipeRefreshLayout.setRefreshing(false);
// CheckForUpdates();
// //NotifyOfAlerts();
// }
//
// }
}