Magisk/app/src/main/java/com/topjohnwu/magisk/ReposFragment.java

175 lines
5.8 KiB
Java
Raw Normal View History

package com.topjohnwu.magisk;
2016-09-23 21:22:11 +00:00
import android.app.Fragment;
2016-09-13 20:44:07 +00:00
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
2016-09-13 20:44:07 +00:00
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.topjohnwu.magisk.module.Repo;
import com.topjohnwu.magisk.module.RepoHelper;
2016-09-20 17:08:05 +00:00
import com.topjohnwu.magisk.utils.Async;
2016-09-13 20:44:07 +00:00
import com.topjohnwu.magisk.utils.Utils;
2016-09-13 20:44:07 +00:00
import java.io.File;
import java.util.ArrayList;
2016-09-13 20:44:07 +00:00
import java.util.Iterator;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class ReposFragment extends Fragment {
public static List<Repo> mListRepos = new ArrayList<>();
2016-09-13 20:44:07 +00:00
public static List<Repo> mListReposToUpdate = new ArrayList<>();
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.empty_rv)
TextView emptyTv;
@BindView(R.id.swipeRefreshLayout)
SwipeRefreshLayout swipeRefreshLayout;
2016-09-13 20:44:07 +00:00
private View mView;
private boolean mCanUpdate;
private boolean alertUpdate;
private boolean ignoreAlertUpdate;
private String alertPackage;
2016-09-23 09:12:29 +00:00
// private SharedPreferences prefs;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
2016-09-18 14:56:12 +00:00
View view = inflater.inflate(R.layout.repos_fragment, container, false);
2016-09-13 20:44:07 +00:00
mView = view;
ButterKnife.bind(this, view);
2016-09-25 13:59:54 +00:00
swipeRefreshLayout.setOnRefreshListener(() -> {
this.LoadRepo(true);
ignoreAlertUpdate = false;
});
LoadRepo(false);
setHasOptionsMenu(false);
2016-09-13 20:44:07 +00:00
alertUpdate = false;
if (mListRepos.size() == 0) {
emptyTv.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
return view;
}
2016-09-13 20:44:07 +00:00
CheckForUpdates();
Log.d("Magisk", "ReposFragment: ListRepos size is " + listRepos().size());
recyclerView.setAdapter(new ReposAdapter(this, mListRepos));
2016-09-24 18:46:42 +00:00
return view;
}
2016-09-13 20:44:07 +00:00
private void CheckForUpdates() {
for (int i = 0; i < mListRepos.size(); i++) {
if (mListRepos.get(i).canUpdate()) {
alertUpdate = true;
mListReposToUpdate.add(mListRepos.get(i));
}
}
}
@Override
public void onAttachFragment(Fragment childFragment) {
super.onAttachFragment(childFragment);
}
2016-09-25 06:16:08 +00:00
private void LoadRepo(boolean doReload) {
RepoHelper.TaskDelegate taskDelegate = result -> {
if (result.equals("Complete")) {
Log.d("Magisk", "ReposFragment, got delegate");
UpdateUI();
2016-09-13 20:44:07 +00:00
if (mView != null) {
mView.invalidate();
mView.requestLayout();
}
}
};
2016-09-23 21:22:11 +00:00
Log.d("Magisk", "ReposFragment, LoadRepo called");
2016-09-21 03:29:43 +00:00
new Async.LoadRepos(getActivity());
}
2016-09-13 20:44:07 +00:00
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);
2016-09-13 20:44:07 +00:00
}
};
String filename = repo.getId().replace(" ", "") + ".zip";
2016-09-21 03:29:43 +00:00
Utils.downloadAndReceive(getActivity(), receiver, repo.getZipUrl(), filename);
2016-09-13 20:44:07 +00:00
break;
case DialogInterface.BUTTON_NEGATIVE:
2016-09-23 09:12:29 +00:00
// ignoreAlertUpdate = true;
// SharedPreferences.Editor editor = prefs.edit();
// editor.putBoolean("ignoreUpdateAlerts", ignoreAlertUpdate);
// editor.apply();
2016-09-13 20:44:07 +00:00
break;
}
};
AlertDialog.Builder 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);
2016-09-23 21:22:11 +00:00
getActivity().setTitle("Magisk");
2016-09-23 21:22:11 +00:00
}
protected List<Repo> listRepos() {
return mListRepos;
}
private void UpdateUI() {
2016-09-25 06:16:08 +00:00
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);
2016-09-13 20:44:07 +00:00
CheckForUpdates();
2016-09-25 13:59:54 +00:00
//NotifyOfAlerts();
}
}
}