diff --git a/res/layout/material_device.xml b/res/layout/material_device.xml
new file mode 100644
index 00000000..16d8acd0
--- /dev/null
+++ b/res/layout/material_device.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a286552f..4afde49b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -151,5 +151,7 @@
Rename device
Rename
Refresh
+ This paired device is not reachable. Make sure it is connected to your same network.
+ There are no file browsers installed.
diff --git a/src/org/kde/kdeconnect/Device.java b/src/org/kde/kdeconnect/Device.java
index 599e18da..f9b168f9 100644
--- a/src/org/kde/kdeconnect/Device.java
+++ b/src/org/kde/kdeconnect/Device.java
@@ -37,8 +37,10 @@ import android.util.Base64;
import android.util.Log;
import org.kde.kdeconnect.Backends.BaseLink;
+import org.kde.kdeconnect.NewUserInterface.MaterialActivity;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.Plugins.PluginFactory;
+import org.kde.kdeconnect.UserInterface.MainActivity;
import org.kde.kdeconnect.UserInterface.PairActivity;
import org.kde.kdeconnect_tp.R;
@@ -475,7 +477,7 @@ public class Device implements BaseLink.PackageReceiver {
Log.i("KDE/Pairing","Pair request");
- Intent intent = new Intent(context, PairActivity.class);
+ Intent intent = new Intent(context, MaterialActivity.class);
intent.putExtra("deviceId", deviceId);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
@@ -527,10 +529,12 @@ public class Device implements BaseLink.PackageReceiver {
} else if (pairStatus == PairStatus.Paired) {
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
preferences.edit().remove(deviceId).apply();
- reloadPluginsFromSettings();
}
pairStatus = PairStatus.NotPaired;
+
+ reloadPluginsFromSettings();
+
for (PairingCallback cb : pairingCallback) cb.unpaired();
}
@@ -695,10 +699,6 @@ public class Device implements BaseLink.PackageReceiver {
failedPlugins.put(pluginKey, plugin);
}
- for (PluginsChangedListener listener : pluginsChangedListeners) {
- listener.onPluginsChanged(Device.this);
- }
-
}
});
@@ -736,6 +736,11 @@ public class Device implements BaseLink.PackageReceiver {
settings.edit().putBoolean(pluginKey,value).apply();
if (value && isPaired() && isReachable()) addPlugin(pluginKey);
else removePlugin(pluginKey);
+
+ for (PluginsChangedListener listener : pluginsChangedListeners) {
+ listener.onPluginsChanged(Device.this);
+ }
+
}
public boolean isPluginEnabled(String pluginKey) {
@@ -768,7 +773,9 @@ public class Device implements BaseLink.PackageReceiver {
}
}
- //No need to call PluginsChangedListeners because addPlugin and removePlugin already do so
+ for (PluginsChangedListener listener : pluginsChangedListeners) {
+ listener.onPluginsChanged(Device.this);
+ }
}
public HashMap getLoadedPlugins() {
diff --git a/src/org/kde/kdeconnect/NewUserInterface/DeviceFragment.java b/src/org/kde/kdeconnect/NewUserInterface/DeviceFragment.java
index 386201a8..79fa03f0 100644
--- a/src/org/kde/kdeconnect/NewUserInterface/DeviceFragment.java
+++ b/src/org/kde/kdeconnect/NewUserInterface/DeviceFragment.java
@@ -21,10 +21,13 @@
package org.kde.kdeconnect.NewUserInterface;
import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -38,11 +41,9 @@ import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NewUserInterface.List.PluginItem;
import org.kde.kdeconnect.Plugins.Plugin;
-import org.kde.kdeconnect.UserInterface.List.ButtonItem;
import org.kde.kdeconnect.UserInterface.List.CustomItem;
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
import org.kde.kdeconnect.UserInterface.List.SmallEntryItem;
-import org.kde.kdeconnect.UserInterface.List.TextItem;
import org.kde.kdeconnect.UserInterface.SettingsActivity;
import org.kde.kdeconnect_tp.R;
@@ -73,6 +74,13 @@ public class DeviceFragment extends Fragment {
this.setArguments(args);
}
+ public DeviceFragment(String deviceId, boolean fromDeviceList) {
+ Bundle args = new Bundle();
+ args.putString(ARG_DEVICE_ID, deviceId);
+ args.putBoolean("fromDeviceList", fromDeviceList);
+ this.setArguments(args);
+ }
+
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@@ -83,9 +91,9 @@ public class DeviceFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- rootView = inflater.inflate(R.layout.activity_device, container, false);
+ rootView = inflater.inflate(R.layout.material_device, container, false);
- String deviceId = getArguments().getString(ARG_DEVICE_ID);
+ final String deviceId = getArguments().getString(ARG_DEVICE_ID);
if (deviceId != null) {
mDeviceId = deviceId;
}
@@ -100,19 +108,16 @@ public class DeviceFragment extends Fragment {
device = service.getDevice(mDeviceId);
if (device == null) {
Log.e("DeviceFragment", "Trying to display a device fragment but the device is not present");
- mActivity.getSupportActionBar().setTitle(R.string.error_not_reachable);
- return;
- }
-
- if (!device.isPaired()) {
- Log.e("DeviceFragment", "This device is no longer paired!");
mActivity.onDeviceSelected(null);
+ return;
}
mActivity.getSupportActionBar().setTitle(device.getName());
+ device.addPairingCallback(pairingCallback);
device.addPluginsChangedListener(pluginsChangedListener);
- pluginsChangedListener.onPluginsChanged(device);
+
+ refreshUI();
if (!device.hasPluginsLoaded()) {
device.reloadPluginsFromSettings();
@@ -120,7 +125,56 @@ public class DeviceFragment extends Fragment {
}
});
+ final Button pairButton = (Button)rootView.findViewById(R.id.pair_button);
+ pairButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pairButton.setVisibility(View.GONE);
+ ((TextView) rootView.findViewById(R.id.pair_message)).setText("");
+ rootView.findViewById(R.id.pair_progress).setVisibility(View.VISIBLE);
+ BackgroundService.RunCommand(mActivity, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ device = service.getDevice(deviceId);
+ if (device == null) return;
+ device.requestPairing();
+ }
+ });
+ }
+ });
+ rootView.findViewById(R.id.accept_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ BackgroundService.RunCommand(mActivity, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ if (device != null) {
+ device.acceptPairing();
+ rootView.findViewById(R.id.pairing_buttons).setVisibility(View.GONE);
+ }
+ }
+ });
+ }
+ });
+
+ rootView.findViewById(R.id.reject_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ BackgroundService.RunCommand(mActivity, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ if (device != null) {
+ //Remove listener so buttons don't show for a while before changing the view
+ device.removePluginsChangedListener(pluginsChangedListener);
+ device.removePairingCallback(pairingCallback);
+ device.rejectPairing();
+ }
+ mActivity.onDeviceSelected(null);
+ }
+ });
+ }
+ });
return rootView;
}
@@ -129,83 +183,7 @@ public class DeviceFragment extends Fragment {
private final Device.PluginsChangedListener pluginsChangedListener = new Device.PluginsChangedListener() {
@Override
public void onPluginsChanged(final Device device) {
- Log.e("DeviceFramgnet", "Refreshing GUI");
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
-
- try {
- ArrayList items = new ArrayList<>();
-
- if (!device.isReachable()) {
- //Not reachable, show unpair button
- Button b = new Button(mActivity);
- b.setText(R.string.device_menu_unpair);
- b.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- device.unpair();
- //finish();
- }
- });
- items.add(new TextItem(getString(R.string.device_not_reachable)));
- items.add(new ButtonItem(b));
- } else {
- //Plugins button list
- final Collection plugins = device.getLoadedPlugins().values();
- for (final Plugin p : plugins) {
- if (!p.hasMainActivity()) continue;
- if (p.displayInContextMenu()) continue;
-
- items.add(new PluginItem(p, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- p.startMainActivity(mActivity);
- }
- }));
- }
-
- //Failed plugins List
- final Collection failed = device.getFailedPlugins().values();
- if (!failed.isEmpty()) {
- if (errorHeader == null) {
- errorHeader = new TextView(mActivity);
- errorHeader.setPadding(
- 0,
- ((int)(28 * getResources().getDisplayMetrics().density)),
- 0,
- ((int)(8 * getResources().getDisplayMetrics().density))
- );
- errorHeader.setOnClickListener(null);
- errorHeader.setOnLongClickListener(null);
- errorHeader.setText(getResources().getString(R.string.plugins_failed_to_load));
- }
- items.add(new CustomItem(errorHeader));
- for (final Plugin p : failed) {
- items.add(new SmallEntryItem(p.getDisplayName(), new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- p.getErrorDialog(mActivity).show();
- }
- }));
- }
- }
- }
-
- ListView buttonsList = (ListView) rootView.findViewById(R.id.buttons_list);
- ListAdapter adapter = new ListAdapter(mActivity, items);
- buttonsList.setAdapter(adapter);
-
- } catch (ConcurrentModificationException e) {
- Log.e("DeviceActivity", "ConcurrentModificationException");
- this.run(); //Try again
- }
-
- mActivity.invalidateOptionsMenu();
-
- }
- });
-
+ refreshUI();
}
};
@@ -217,6 +195,7 @@ public class DeviceFragment extends Fragment {
Device device = service.getDevice(mDeviceId);
if (device == null) return;
device.removePluginsChangedListener(pluginsChangedListener);
+ device.removePairingCallback(pairingCallback);
}
});
super.onDestroyView();
@@ -230,7 +209,7 @@ public class DeviceFragment extends Fragment {
super.onPrepareOptionsMenu(menu);
menu.clear();
- if (device == null || !device.isPaired()) {
+ if (device == null) {
return;
}
@@ -258,14 +237,20 @@ public class DeviceFragment extends Fragment {
return true;
}
});
- menu.add(R.string.device_menu_unpair).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem menuItem) {
- device.unpair();
- mActivity.onDeviceSelected(null);
- return true;
- }
- });
+
+ if (device.isPaired()) {
+ menu.add(R.string.device_menu_unpair).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem menuItem) {
+ //Remove listener so buttons don't show for a while before changing the view
+ device.removePluginsChangedListener(pluginsChangedListener);
+ device.removePairingCallback(pairingCallback);
+ device.unpair();
+ mActivity.onDeviceSelected(null);
+ return true;
+ }
+ });
+ }
}
@@ -277,9 +262,158 @@ public class DeviceFragment extends Fragment {
public void onServiceStart(BackgroundService service) {
if (mDeviceId != null) {
Device device = service.getDevice(mDeviceId);
- device.reloadPluginsFromSettings();
+ if (device != null) {
+ device.reloadPluginsFromSettings();
+ }
}
}
});
+
+ getView().setFocusableInTouchMode(true);
+ getView().requestFocus();
+ getView().setOnKeyListener(new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
+ boolean fromDeviceList = getArguments().getBoolean("fromDeviceList", false);
+ // Handle back button so we go to the list of devices in case we came from there
+ if (fromDeviceList) {
+ mActivity.onDeviceSelected(null);
+ return true;
+ }
+ }
+ return false;
+ }
+ });
}
+
+ void refreshUI() {
+ Log.e("DeviceFragment", "refreshUI");
+
+ if (device == null || rootView == null) {
+ return;
+ }
+
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+
+ boolean paired = device.isPaired();
+ boolean reachable = device.isReachable();
+
+ rootView.findViewById(R.id.pairing_buttons).setVisibility(paired ? View.GONE : View.VISIBLE);
+ rootView.findViewById(R.id.unpair_message).setVisibility((paired && !reachable)? View.VISIBLE : View.GONE);
+
+ try {
+ ArrayList items = new ArrayList<>();
+
+ //Plugins button list
+ final Collection plugins = device.getLoadedPlugins().values();
+ for (final Plugin p : plugins) {
+ if (!p.hasMainActivity()) continue;
+ if (p.displayInContextMenu()) continue;
+
+ items.add(new PluginItem(p, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ p.startMainActivity(mActivity);
+ }
+ }));
+ }
+
+ //Failed plugins List
+ final Collection failed = device.getFailedPlugins().values();
+ if (!failed.isEmpty()) {
+ if (errorHeader == null) {
+ errorHeader = new TextView(mActivity);
+ errorHeader.setPadding(
+ 0,
+ ((int) (28 * getResources().getDisplayMetrics().density)),
+ 0,
+ ((int) (8 * getResources().getDisplayMetrics().density))
+ );
+ errorHeader.setOnClickListener(null);
+ errorHeader.setOnLongClickListener(null);
+ errorHeader.setText(getResources().getString(R.string.plugins_failed_to_load));
+ }
+ items.add(new CustomItem(errorHeader));
+ for (final Plugin p : failed) {
+ items.add(new SmallEntryItem(p.getDisplayName(), new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ p.getErrorDialog(mActivity).show();
+ }
+ }));
+ }
+ }
+
+ ListView buttonsList = (ListView) rootView.findViewById(R.id.buttons_list);
+ ListAdapter adapter = new ListAdapter(mActivity, items);
+ buttonsList.setAdapter(adapter);
+
+
+ } catch (ConcurrentModificationException e) {
+ Log.e("DeviceActivity", "ConcurrentModificationException");
+ this.run(); //Try again
+ }
+
+ mActivity.invalidateOptionsMenu();
+
+ }
+ });
+
+ }
+
+ private final Device.PairingCallback pairingCallback = new Device.PairingCallback() {
+
+ @Override
+ public void incomingRequest() {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ((TextView) rootView.findViewById(R.id.pair_message)).setText(R.string.pair_requested);
+ rootView.findViewById(R.id.pair_progress).setVisibility(View.GONE);
+ rootView.findViewById(R.id.pair_button).setVisibility(View.GONE);
+ rootView.findViewById(R.id.pair_request).setVisibility(View.VISIBLE);
+ }
+ });
+ NotificationManager notificationManager = (NotificationManager) mActivity.getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.cancel(device.getNotificationId());
+ }
+
+ @Override
+ public void pairingSuccessful() {
+ refreshUI();
+ }
+
+ @Override
+ public void pairingFailed(final String error) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ((TextView) rootView.findViewById(R.id.pair_message)).setText(error);
+ rootView.findViewById(R.id.pair_progress).setVisibility(View.GONE);
+ rootView.findViewById(R.id.pair_button).setVisibility(View.VISIBLE);
+ rootView.findViewById(R.id.pair_request).setVisibility(View.GONE);
+ refreshUI();
+ }
+ });
+ }
+
+ @Override
+ public void unpaired() {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ((TextView) rootView.findViewById(R.id.pair_message)).setText(R.string.device_not_paired);
+ rootView.findViewById(R.id.pair_progress).setVisibility(View.GONE);
+ rootView.findViewById(R.id.pair_button).setVisibility(View.VISIBLE);
+ rootView.findViewById(R.id.pair_request).setVisibility(View.GONE);
+ refreshUI();
+ }
+ });
+ }
+
+ };
+
}
diff --git a/src/org/kde/kdeconnect/NewUserInterface/MaterialActivity.java b/src/org/kde/kdeconnect/NewUserInterface/MaterialActivity.java
index 2dce6d46..531d8c63 100644
--- a/src/org/kde/kdeconnect/NewUserInterface/MaterialActivity.java
+++ b/src/org/kde/kdeconnect/NewUserInterface/MaterialActivity.java
@@ -26,7 +26,6 @@ import android.widget.TextView;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
-import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect_tp.R;
import java.util.Collection;
@@ -90,7 +89,10 @@ public class MaterialActivity extends AppCompatActivity {
preferences = getSharedPreferences(STATE_SELECTED_DEVICE, Context.MODE_PRIVATE);
String savedDevice;
- if (savedInstanceState != null) {
+ if (getIntent().hasExtra("deviceId")) {
+ Log.i("MaterialActivity", "Loading selected device from parameter");
+ savedDevice = getIntent().getStringExtra("deviceId");
+ } else if (savedInstanceState != null) {
Log.i("MaterialActivity", "Loading selected device from saved activity state");
savedDevice = savedInstanceState.getString(STATE_SELECTED_DEVICE);
} else {
@@ -122,6 +124,8 @@ public class MaterialActivity extends AppCompatActivity {
private void updateComputerList() {
+ Log.e("MaterialActivity", "UpdateComputerList");
+
BackgroundService.RunCommand(MaterialActivity.this, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(final BackgroundService service) {
@@ -189,7 +193,7 @@ public class MaterialActivity extends AppCompatActivity {
//TODO: Make it accept two parameters, a constant with the type of screen and the device id in
//case the screen is for a device, or even three parameters and the third one be the plugin id?
//This way we can keep adding more options with null plugin id (eg: about)
- public void onDeviceSelected(String deviceId) {
+ public void onDeviceSelected(String deviceId, boolean stack) {
mCurrentDevice = deviceId;
@@ -204,14 +208,17 @@ public class MaterialActivity extends AppCompatActivity {
if (deviceId == null) {
fragment = new PairingFragment();
} else {
- fragment = new DeviceFragment(deviceId);
+ fragment = new DeviceFragment(deviceId, stack);
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();
+ }
+ public void onDeviceSelected(String deviceId) {
+ onDeviceSelected(deviceId, false);
}
@Override
diff --git a/src/org/kde/kdeconnect/NewUserInterface/PairingFragment.java b/src/org/kde/kdeconnect/NewUserInterface/PairingFragment.java
index d1f21f3d..29a4ed9e 100644
--- a/src/org/kde/kdeconnect/NewUserInterface/PairingFragment.java
+++ b/src/org/kde/kdeconnect/NewUserInterface/PairingFragment.java
@@ -25,7 +25,11 @@ import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
@@ -34,9 +38,9 @@ import android.widget.TextView;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NewUserInterface.List.PairingDeviceItem;
+import org.kde.kdeconnect.UserInterface.CustomDevicesActivity;
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
import org.kde.kdeconnect.UserInterface.List.SectionItem;
-import org.kde.kdeconnect.UserInterface.PairActivity;
import org.kde.kdeconnect_tp.R;
import java.util.ArrayList;
@@ -55,10 +59,15 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
private MaterialActivity mActivity;
private MenuItem menuProgress;
+
+ boolean listRefreshCalledThisFrame = false;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ Log.e("PairingFragmen", "OnCreateView");
+
mActivity.getSupportActionBar().setTitle(R.string.pairing_title);
@@ -70,7 +79,7 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
TextView text = new TextView(inflater.getContext());
text.setText(getString(R.string.pairing_description));
text.setPadding(0, 0, 0, (int) (12 * getResources().getDisplayMetrics().density));
- ((ListView)rootView).addHeaderView(text);
+ ((ListView) rootView).addHeaderView(text);
return rootView;
}
@@ -82,47 +91,81 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
}
void updateComputerList() {
-
BackgroundService.RunCommand(mActivity, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(final BackgroundService service) {
-
- Collection devices = service.getDevices().values();
- final ArrayList items = new ArrayList<>();
-
- SectionItem section;
- Resources res = getResources();
-
- section = new SectionItem(res.getString(R.string.category_not_paired_devices));
- section.isSectionEmpty = true;
- items.add(section);
- for (Device device : devices) {
- if (device.isReachable() && !device.isPaired()) {
- items.add(new PairingDeviceItem(device, PairingFragment.this));
- section.isSectionEmpty = false;
- }
- }
-
- section = new SectionItem(res.getString(R.string.category_connected_devices));
- section.isSectionEmpty = true;
- items.add(section);
- for (Device device : devices) {
- if (device.isReachable() && device.isPaired()) {
- items.add(new PairingDeviceItem(device, PairingFragment.this));
- section.isSectionEmpty = false;
- }
- }
- if (section.isSectionEmpty) {
- items.remove(items.size() - 1); //Remove connected devices section if empty
- }
-
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
- ListView list = (ListView) rootView.findViewById(R.id.listView1);
- list.setAdapter(new ListAdapter(mActivity, items));
+
+ if (listRefreshCalledThisFrame) {
+ return; // This makes sure we don't try to call list.getFirstVisiblePosition()
+ // twice per frame, because the second time the list hasn't been drawn
+ // yet and it would always return 0.
+ }
+ listRefreshCalledThisFrame = true;
+
+ try {
+ Collection devices = service.getDevices().values();
+ final ArrayList items = new ArrayList<>();
+
+ SectionItem section;
+ Resources res = getResources();
+
+ section = new SectionItem(res.getString(R.string.category_not_paired_devices));
+ section.isSectionEmpty = true;
+ items.add(section);
+ for (Device device : devices) {
+ if (device.isReachable() && !device.isPaired()) {
+ items.add(new PairingDeviceItem(device, PairingFragment.this));
+ section.isSectionEmpty = false;
+ }
+ }
+/*
+ section = new SectionItem(res.getString(R.string.category_connected_devices));
+ section.isSectionEmpty = true;
+ items.add(section);
+ for (Device device : devices) {
+ if (device.isReachable() && device.isPaired()) {
+ items.add(new PairingDeviceItem(device, PairingFragment.this));
+ section.isSectionEmpty = false;
+ }
+ }
+ if (section.isSectionEmpty) {
+ items.remove(items.size() - 1); //Remove connected devices section if empty
+ }
+*/
+ section = new SectionItem(res.getString(R.string.category_remembered_devices));
+ section.isSectionEmpty = true;
+ items.add(section);
+ for (Device device : devices) {
+ if (!device.isReachable() && device.isPaired()) {
+ items.add(new PairingDeviceItem(device, PairingFragment.this));
+ section.isSectionEmpty = false;
+ }
+ }
+ if (section.isSectionEmpty) {
+ items.remove(items.size() - 1); //Remove remembered devices section if empty
+ }
+
+ final ListView list = (ListView) rootView.findViewById(R.id.listView1);
+
+ //Store current scroll
+ int index = list.getFirstVisiblePosition();
+ View v = list.getChildAt(0);
+ int top = (v == null) ? 0 : (v.getTop() - list.getPaddingTop());
+
+ list.setAdapter(new ListAdapter(mActivity, items));
+
+ //Restore scroll
+ list.setSelectionFromTop(index, top);
+
+ } finally {
+ listRefreshCalledThisFrame = false;
+ }
}
});
+
}
});
}
@@ -164,9 +207,7 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
@Override
public void pairingClicked(Device device) {
- Intent intent = new Intent(mActivity, PairActivity.class);
- intent.putExtra("deviceId", device.getDeviceId());
- startActivityForResult(intent, RESULT_PAIRING_SUCCESFUL);
+ mActivity.onDeviceSelected(device.getDeviceId(), !device.isPaired() || !device.isReachable());
}
@Override
@@ -226,5 +267,4 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
}
-
}