package com.amaze.filemanager.ui.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
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 android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.amaze.filemanager.R;
import com.amaze.filemanager.activities.MainActivity;
import com.amaze.filemanager.adapters.RecyclerArrayAdapter;
import com.amaze.filemanager.utils.Computer;
import com.amaze.filemanager.utils.PreferenceUtils;
import com.amaze.filemanager.utils.SubnetScanner;
import com.amaze.filemanager.utils.provider.UtilitiesProviderInterface;
import com.amaze.filemanager.utils.theme.AppTheme;
import java.util.ArrayList;
import java.util.List;
/**
* Created by arpitkh996 on 16-01-2016.
*/
public class SmbSearchDialog extends DialogFragment {
private UtilitiesProviderInterface utilsProvider;
listViewAdapter listViewAdapter;
ArrayList<Computer> computers = new ArrayList<>();
SharedPreferences sharedPrefs;
int fabskin;
SubnetScanner subnetScanner;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
utilsProvider = (UtilitiesProviderInterface) getActivity();
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
fabskin = Color.parseColor(PreferenceUtils.getAccentString(sharedPrefs));
}
@Override
public void dismiss() {
super.dismiss();
if (subnetScanner != null)
subnetScanner.interrupt();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
MaterialDialog.Builder builder = new MaterialDialog.Builder(getActivity());
builder.title(R.string.searchingdevices);
builder.negativeColor(fabskin);
builder.negativeText(R.string.cancel);
builder.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (subnetScanner != null)
subnetScanner.interrupt();
dismiss();
}
});
builder.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (subnetScanner != null)
subnetScanner.interrupt();
if (getActivity() != null && getActivity() instanceof MainActivity) {
dismiss();
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.showSMBDialog("", "", false);
}
}
});
builder.positiveText(R.string.use_custom_ip);
builder.positiveColor(fabskin);
computers.add(new Computer("-1", "-1"));
listViewAdapter = new listViewAdapter(getActivity(), R.layout.smb_computers_row, computers);
subnetScanner = new SubnetScanner(getActivity());
subnetScanner.setObserver(new SubnetScanner.ScanObserver() {
@Override
public void computerFound(final Computer computer) {
if (getActivity() != null)
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (!computers.contains(computer))
computers.add(computer);
listViewAdapter.notifyDataSetChanged();
}
});
}
@Override
public void searchFinished() {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (computers.size() == 1) {
dismiss();
Toast.makeText(getActivity(), getResources().getString(R.string.nodevicefound), Toast.LENGTH_SHORT).show();
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.showSMBDialog("", "", false);
return;
}
computers.remove(computers.size() - 1);
listViewAdapter.notifyDataSetChanged();
}
});
}
}
});
subnetScanner.start();
builder.adapter(listViewAdapter, null);
return builder.build();
}
private class listViewAdapter extends RecyclerArrayAdapter<Computer, listViewAdapter.ViewHolder> {
private static final int VIEW_PROGRESSBAR = 1;
private static final int VIEW_ELEMENT = 2;
LayoutInflater mInflater;
Context context;
public listViewAdapter(Context context, @LayoutRes int resource, List<Computer> objects) {
this.context = context;
addAll(objects);
mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_PROGRESSBAR:
ProgressBar progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyle);
progressBar.setIndeterminate(true);
progressBar.setBackgroundDrawable(null);
return new ViewHolder(progressBar);
default:
case VIEW_ELEMENT:
View view = mInflater.inflate(R.layout.smb_computers_row, parent, false);
return new ElementViewHolder(view);
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.render(position, getItem(position));
}
class ViewHolder extends RecyclerView.ViewHolder {
ViewHolder(View itemView) {
super(itemView);
}
public void render(final int p, Computer f) {
}
}
class ElementViewHolder extends ViewHolder {
private View rootView;
private ImageView image;
private TextView txtTitle;
private TextView txtDesc;
ElementViewHolder(View view) {
super(view);
rootView = view;
txtTitle = (TextView) view.findViewById(R.id.firstline);
image = (ImageView) view.findViewById(R.id.icon);
txtDesc = (TextView) view.findViewById(R.id.secondLine);
}
@Override
public void render(final int p, Computer f) {
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (subnetScanner != null)
subnetScanner.interrupt();
if (getActivity() != null && getActivity() instanceof MainActivity) {
dismiss();
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.showSMBDialog(listViewAdapter.getItem(p).name, listViewAdapter.getItem(p).addr, false);
}
}
});
txtTitle.setText(f.name);
image.setImageResource(R.drawable.ic_settings_remote_white_48dp);
if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT))
image.setColorFilter(Color.parseColor("#666666"));
txtDesc.setText(f.addr);
}
}
@Override
public int getItemViewType(int position) {
Computer f = getItem(position);
if (f.addr.equals("-1")) {
return VIEW_PROGRESSBAR;
} else {
return VIEW_ELEMENT;
}
}
}
}