parent
12b8fc3648
commit
011b586c6b
@ -0,0 +1,148 @@ |
||||
package fr.mobdev.lpcprog.fragment; |
||||
|
||||
import android.app.Activity; |
||||
import android.app.Fragment; |
||||
import android.content.Context; |
||||
import android.os.Bundle; |
||||
import android.support.annotation.Nullable; |
||||
import android.support.design.widget.Snackbar; |
||||
import android.support.v4.widget.SwipeRefreshLayout; |
||||
import android.support.v7.widget.LinearLayoutManager; |
||||
import android.support.v7.widget.RecyclerView; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
import android.widget.ProgressBar; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
import fr.mobdev.lpcprog.R; |
||||
import fr.mobdev.lpcprog.adapters.BinariesAdapter; |
||||
import fr.mobdev.lpcprog.listener.NetworkListener; |
||||
import fr.mobdev.lpcprog.managers.DatabaseManager; |
||||
import fr.mobdev.lpcprog.managers.NetworkManager; |
||||
import fr.mobdev.lpcprog.objects.Binary; |
||||
import fr.mobdev.lpcprog.objects.Server; |
||||
|
||||
public class BrowseRepositoryFragment extends Fragment { |
||||
|
||||
private BrowseRepositoryListener browseListener; |
||||
private List<Server> servers; |
||||
|
||||
public static BrowseRepositoryFragment newInstance(BrowseRepositoryListener browseRepositoryListener) { |
||||
BrowseRepositoryFragment fragment = new BrowseRepositoryFragment(); |
||||
fragment.setBrowseRepositoryListener(browseRepositoryListener); |
||||
return fragment; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void onCreate(Bundle savedInstanceState) { |
||||
super.onCreate(savedInstanceState); |
||||
servers = new ArrayList<>(); |
||||
} |
||||
|
||||
@Override |
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { |
||||
final View v = inflater.inflate(R.layout.repository,container,false); |
||||
RecyclerView list = v.findViewById(R.id.bin_list); |
||||
list.setLayoutManager(new LinearLayoutManager(getActivity())); |
||||
SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.swipe_refresh); |
||||
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { |
||||
@Override |
||||
public void onRefresh() { |
||||
updateRepositories(v); |
||||
} |
||||
}); |
||||
return v; |
||||
} |
||||
|
||||
@Override |
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { |
||||
super.onViewCreated(view, savedInstanceState); |
||||
updateRepositories(view); |
||||
} |
||||
|
||||
public void setBrowseRepositoryListener(BrowseRepositoryListener browseRepositoryListener) { |
||||
browseListener = browseRepositoryListener; |
||||
} |
||||
|
||||
public void updateRepositories(View view){ |
||||
if(view == null) |
||||
view = getView(); |
||||
final View v = view; |
||||
assert v != null; |
||||
servers.clear(); |
||||
final NetworkListener listener = new NetworkListener() { |
||||
@Override |
||||
public void startBinaries() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.swipe_refresh); |
||||
swipeRefresh.setRefreshing(true); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void startServer(Server server) { |
||||
} |
||||
|
||||
@Override |
||||
public void endServer(Server server) { |
||||
if(!server.binaries.isEmpty()) |
||||
servers.add(server); |
||||
} |
||||
|
||||
@Override |
||||
public void endBinaries() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
RecyclerView list = v.findViewById(R.id.bin_list); |
||||
BinariesAdapter adapter = new BinariesAdapter(servers,browseListener); |
||||
list.setAdapter(adapter); |
||||
SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.swipe_refresh); |
||||
swipeRefresh.setRefreshing(false); |
||||
|
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void onError(final String error) { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
final Snackbar msg = Snackbar.make(v.findViewById(R.id.swipe_refresh), error,Snackbar.LENGTH_LONG); |
||||
msg.show(); |
||||
List<List<Server>> localServers = DatabaseManager.getInstance(getActivity()).getServers(getActivity()); |
||||
servers.addAll(localServers.get(0)); |
||||
servers.addAll(localServers.get(1)); |
||||
servers.addAll(localServers.get(2)); |
||||
RecyclerView list = v.findViewById(R.id.bin_list); |
||||
BinariesAdapter adapter = new BinariesAdapter(servers,browseListener); |
||||
list.setAdapter(adapter); |
||||
SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.swipe_refresh); |
||||
swipeRefresh.setRefreshing(false); |
||||
} |
||||
}); |
||||
} |
||||
}; |
||||
NetworkManager.getInstance(listener).browseBinaries(getActivity()); |
||||
} |
||||
|
||||
@Override |
||||
public void onAttach(Context context) { |
||||
super.onAttach(context); |
||||
if(servers != null) |
||||
updateRepositories(null); |
||||
} |
||||
|
||||
public interface BrowseRepositoryListener { |
||||
void onBinaryClick(Server server, Binary binary); |
||||
} |
||||
|
||||
} |
@ -1,359 +0,0 @@ |
||||
/* |
||||
* Copyright (C) 2016 Anthony Chomienne, anthony@mob-dev.fr |
||||
* |
||||
* This program is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU General Public License |
||||
* as published by the Free Software Foundation; either version 3 |
||||
* of the License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||
*/ |
||||
|
||||
package fr.mobdev.lpcprog.fragment; |
||||
|
||||
import android.annotation.SuppressLint; |
||||
import android.app.ProgressDialog; |
||||
import android.content.DialogInterface; |
||||
import android.support.design.widget.Snackbar; |
||||
import android.os.Bundle; |
||||
import android.support.v4.app.Fragment; |
||||
import android.support.v7.app.AlertDialog; |
||||
import android.support.v7.widget.LinearLayoutManager; |
||||
import android.support.v7.widget.RecyclerView; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
import android.widget.ImageView; |
||||
import android.widget.ProgressBar; |
||||
import android.widget.TextView; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
import fr.mobdev.lpcprog.adapters.BinariesAdapter; |
||||
import fr.mobdev.lpcprog.listener.FlashListener; |
||||
import fr.mobdev.lpcprog.listener.NetworkListener; |
||||
import fr.mobdev.lpcprog.managers.DatabaseManager; |
||||
import fr.mobdev.lpcprog.managers.IspManager; |
||||
import fr.mobdev.lpcprog.R; |
||||
import fr.mobdev.lpcprog.managers.NetworkManager; |
||||
import fr.mobdev.lpcprog.objects.Server; |
||||
import fr.mobdev.lpcprog.objects.USBDevice; |
||||
import fr.mobdev.lpcprog.managers.UsbCommManager; |
||||
|
||||
/* |
||||
Fragment that handle action on a specific device that can be flash with some Binaries |
||||
*/ |
||||
public class DeviceFragment extends Fragment { |
||||
|
||||
private UsbCommManager comm; |
||||
private USBDevice dev; |
||||
private List<Server> servers; |
||||
private long part_id; |
||||
private FlashListener flashListener; |
||||
|
||||
public DeviceFragment() { |
||||
|
||||
} |
||||
|
||||
public static DeviceFragment newInstance(int PID, int VID) { |
||||
DeviceFragment frag = new DeviceFragment(); |
||||
Bundle args = new Bundle(); |
||||
args.putInt("PID",PID); |
||||
args.putInt("VID",VID); |
||||
frag.setArguments(args); |
||||
return frag; |
||||
} |
||||
|
||||
@Override |
||||
public void onCreate(Bundle savedInstanceState) { |
||||
super.onCreate(savedInstanceState); |
||||
} |
||||
|
||||
@SuppressLint("SetTextI18n") |
||||
@Override |
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { |
||||
super.onCreateView(inflater,container,savedInstanceState); |
||||
final View v = inflater.inflate(R.layout.device,container,false); |
||||
servers = new ArrayList<>(); |
||||
comm = UsbCommManager.getInstance(getActivity()); |
||||
part_id = 0; |
||||
List<USBDevice> devices = comm.getDevices(); |
||||
int pid = getArguments().getInt("PID",-1); |
||||
int vid = getArguments().getInt("VID",-1); |
||||
for(USBDevice device : devices){ |
||||
if(device.PID == pid && device.VID == vid){ |
||||
dev = device; |
||||
break; |
||||
} |
||||
} |
||||
if(dev != null) { |
||||
TextView name = (TextView) v.findViewById(R.id.name); |
||||
name.setText(getString(R.string.dev_name)+ dev.description); |
||||
TextView vendor = (TextView) v.findViewById(R.id.vendor_id); |
||||
vendor.setText(getString(R.string.vendor_id)+String.format("%04x", dev.VID)); |
||||
TextView product = (TextView) v.findViewById(R.id.id); |
||||
product.setText(getString(R.string.product_id)+String.format("%04x", dev.PID)); |
||||
} |
||||
doUsb(); |
||||
ProgressBar bar = (ProgressBar) v.findViewById(R.id.progress_browse); |
||||
bar.setVisibility(View.GONE); |
||||
|
||||
RecyclerView list = (RecyclerView) v.findViewById(R.id.bin_list); |
||||
list.setLayoutManager(new LinearLayoutManager(getContext())); |
||||
final ProgressDialog dialog = new ProgressDialog(getActivity()); |
||||
dialog.setCancelable(false); |
||||
dialog.setTitle(R.string.flash_progress); |
||||
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); |
||||
dialog.setMessage("toto"); |
||||
|
||||
flashListener = new FlashListener() { |
||||
|
||||
@Override |
||||
public void onStartFlash() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
dialog.show(); |
||||
|
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
dialog.dismiss(); |
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); |
||||
builder.setTitle(R.string.flash_succeed); |
||||
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { |
||||
|
||||
@Override |
||||
public void onClick(DialogInterface dialogInterface, int i) { |
||||
|
||||
} |
||||
}); |
||||
final AlertDialog alert = builder.create(); |
||||
alert.setOnShowListener(new DialogInterface.OnShowListener() { |
||||
@Override |
||||
public void onShow(DialogInterface dialogInterface) { |
||||
alert.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(0xFF000000); |
||||
} |
||||
}); |
||||
alert.show(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void onProgress(final int step, final int endStep, final int progress, final int step_res_id) { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
dialog.setMax(100); |
||||
dialog.setProgress(progress); |
||||
dialog.setMessage(getString(R.string.step)+" "+String.valueOf(step)+"/"+String.valueOf(endStep)+" "+getString(step_res_id)); |
||||
dialog.show(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void onError(final String error, final ImageView view) { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
dialog.dismiss(); |
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); |
||||
builder.setMessage(error); |
||||
builder.setPositiveButton(R.string.retry_browse, new DialogInterface.OnClickListener() { |
||||
@Override |
||||
public void onClick(DialogInterface dialogInterface, int i) { |
||||
view.performClick(); |
||||
} |
||||
}); |
||||
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { |
||||
@Override |
||||
public void onClick(DialogInterface dialogInterface, int i) { |
||||
|
||||
} |
||||
}); |
||||
final AlertDialog alert = builder.create(); |
||||
alert.setOnShowListener(new DialogInterface.OnShowListener() { |
||||
@Override |
||||
public void onShow(DialogInterface dialogInterface) { |
||||
alert.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(0xFF000000); |
||||
alert.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(0xFF000000); |
||||
} |
||||
}); |
||||
alert.show(); |
||||
} |
||||
}); |
||||
} |
||||
}; |
||||
updateRepositories(v); |
||||
return v; |
||||
} |
||||
|
||||
private void doUsb(){ |
||||
new Thread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
boolean conn = comm.openConnection(dev); |
||||
IspManager manager = IspManager.getInstance(getActivity()); |
||||
String uidStr = "No UID Found or error"; |
||||
String bootStr = "No Boot Version Found or error"; |
||||
String partidStr = "No Part ID Found or error"; |
||||
if(conn && manager.setupDevice(dev, 115200)) { |
||||
if(!manager.synchronizeIfPossible(10000)) { |
||||
updateIDS(uidStr,partidStr,bootStr); |
||||
getActivity().runOnUiThread(new Thread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
View v = getView(); |
||||
if(v == null) |
||||
return; |
||||
final Snackbar msg = Snackbar.make(v.findViewById(R.id.bin_list), getString(R.string.can_read_uid),Snackbar.LENGTH_INDEFINITE); |
||||
msg.setAction(R.string.retry_browse, new View.OnClickListener() { |
||||
@Override |
||||
public void onClick(View v) { |
||||
msg.dismiss(); |
||||
doUsb(); |
||||
} |
||||
}); |
||||
msg.show(); |
||||
} |
||||
})); |
||||
return; |
||||
} |
||||
String[] version = manager.readBootVersion(); |
||||
String partid = manager.readPartId(); |
||||
String[] uids = manager.readUid(); |
||||
if (uids != null) { |
||||
uidStr = String.format("UID: %08x - %08x - %08x - %08x",Long.parseLong(uids[0]), |
||||
Long.parseLong(uids[1]), |
||||
Long.parseLong(uids[2]), |
||||
Long.parseLong(uids[3])); |
||||
} |
||||
if (version != null) { |
||||
bootStr = "Boot Version: " + version[0] + "." + version[1]; |
||||
} |
||||
if(partid != null){ |
||||
partidStr = String.format("Part Id %08x",Long.parseLong(partid)); |
||||
part_id = Long.parseLong(partid); |
||||
IspManager.getInstance(getActivity()).setPartId(part_id); |
||||
} |
||||
} |
||||
updateIDS(uidStr,partidStr,bootStr); |
||||
|
||||
} |
||||
}).start(); |
||||
} |
||||
@SuppressLint("N") |
||||
private void updateIDS(final String uid, final String partid, final String boot) { |
||||
final View v = getView(); |
||||
assert v != null; |
||||
if(getActivity() != null) { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
TextView view = (TextView) v.findViewById(R.id.uids); |
||||
view.setText(uid); |
||||
|
||||
view = (TextView) v.findViewById(R.id.part_id); |
||||
view.setText(partid); |
||||
|
||||
view = (TextView) v.findViewById(R.id.boot_version); |
||||
view.setText(boot); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
|
||||
public void updateRepositories(View view){ |
||||
if(view == null) |
||||
view = getView(); |
||||
final View v = view; |
||||
assert v != null; |
||||
servers.clear(); |
||||
final NetworkListener listener = new NetworkListener() { |
||||
@Override |
||||
public void startBinaries() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
ProgressBar bar = (ProgressBar) v.findViewById(R.id.progress_browse); |
||||
bar.setVisibility(View.VISIBLE); |
||||
RecyclerView list = (RecyclerView) v.findViewById(R.id.bin_list); |
||||
list.setVisibility(View.GONE); |
||||
|
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void startServer(Server server) { |
||||
} |
||||
|
||||
@Override |
||||
public void endServer(Server server) { |
||||
if(!server.binaries.isEmpty()) |
||||
servers.add(server); |
||||
} |
||||
|
||||
@Override |
||||
public void endBinaries() { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
ProgressBar bar = (ProgressBar) v.findViewById(R.id.progress_browse); |
||||
bar.setVisibility(View.GONE); |
||||
RecyclerView list = (RecyclerView) v.findViewById(R.id.bin_list); |
||||
list.setVisibility(View.VISIBLE); |
||||
BinariesAdapter adapter = new BinariesAdapter(servers, getActivity(),flashListener); |
||||
list.setAdapter(adapter); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void onError(final String error) { |
||||
getActivity().runOnUiThread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
ProgressBar bar = (ProgressBar) v.findViewById(R.id.progress_browse); |
||||
bar.setVisibility(View.GONE); |
||||
final Snackbar msg = Snackbar.make(v.findViewById(R.id.bin_list), error,Snackbar.LENGTH_INDEFINITE); |
||||
msg.setAction(R.string.retry_browse, new View.OnClickListener() { |
||||
@Override |
||||
public void onClick(View v) { |
||||
msg.dismiss(); |
||||
updateRepositories(null); |
||||
} |
||||
}); |
||||
msg.show(); |
||||
List<List<Server>> localServers = DatabaseManager.getInstance(getActivity()).getServers(getActivity()); |
||||
servers.addAll(localServers.get(0)); |
||||
servers.addAll(localServers.get(1)); |
||||
servers.addAll(localServers.get(2)); |
||||
RecyclerView list = (RecyclerView) v.findViewById(R.id.bin_list); |
||||
list.setVisibility(View.VISIBLE); |
||||
BinariesAdapter adapter = new BinariesAdapter(servers,getActivity(),flashListener); |
||||
list.setAdapter(adapter); |
||||
|
||||
} |
||||
}); |
||||
} |
||||
}; |
||||
NetworkManager.getInstance(listener,getActivity()).browseBinaries(); |
||||
} |
||||
} |
@ -0,0 +1,392 @@ |
||||
package fr.mobdev.lpcprog.fragment; |
||||
|
||||
import android.annotation.SuppressLint; |
||||
import android.app.Fragment; |
||||
import android.os.Bundle; |
||||
import android.support.annotation.Nullable; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
import android.widget.Button; |
||||
import android.widget.ProgressBar; |
||||
import android.widget.TextView; |
||||
|
||||
import fr.mobdev.lpcprog.R; |
||||
import fr.mobdev.lpcprog.listener.DownloadListener; |
||||
import fr.mobdev.lpcprog.listener.FlashListener; |
||||
import fr.mobdev.lpcprog.managers.IspManager; |
||||
import fr.mobdev.lpcprog.managers.NetworkManager; |
||||
import fr.mobdev.lpcprog.managers.UsbCommManager; |
||||
import fr.mobdev.lpcprog.objects.Binary; |
||||
import fr.mobdev.lpcprog.objects.Server; |
||||
import fr.mobdev.lpcprog.objects.USBDevice; |
||||
|
||||
public class FlashFragment extends Fragment{ |
||||
|
||||
private USBDevice device; |
||||
private Binary binary; |
||||
private Server server; |
||||
private Long part_id; |
||||
private String uidStr; |
||||
private String bootStr; |
||||
private String partidStr; |
||||
private String flash_infoStr=""; |
||||
private TextView flash_info; |
||||
private ProgressBar progressBar; |
||||
private FlashListener flashListener; |
||||
|
||||
|
||||
public static FlashFragment newInstance(USBDevice device, Server server, Binary binary) { |
||||
FlashFragment fragment = new FlashFragment(); |
||||
fragment.setDevice(device); |
||||
fragment.setBinary(server, binary); |
||||
return fragment; |
||||
} |
||||
|
||||
|
||||
@SuppressLint |