move all WiFi/QR logic to Presenter (SwapWorkflowActivity)
This commit is contained in:
parent
ea3b47f705
commit
69ce8dbe8c
@ -1,27 +1,12 @@
|
|||||||
package org.fdroid.fdroid.views.swap;
|
package org.fdroid.fdroid.views.swap;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.graphics.LightingColorFilter;
|
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import org.fdroid.fdroid.FDroidApp;
|
|
||||||
import org.fdroid.fdroid.Preferences;
|
|
||||||
import org.fdroid.fdroid.QrGenAsyncTask;
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.Utils;
|
|
||||||
import org.fdroid.fdroid.localrepo.SwapView;
|
import org.fdroid.fdroid.localrepo.SwapView;
|
||||||
import org.fdroid.fdroid.net.WifiStateChangeService;
|
|
||||||
import org.fdroid.fdroid.views.swap.device.camera.CameraCharacteristicsChecker;
|
|
||||||
|
|
||||||
public class SendFDroidView extends SwapView {
|
public class SendFDroidView extends SwapView {
|
||||||
|
|
||||||
@ -47,13 +32,6 @@ public class SendFDroidView extends SwapView {
|
|||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
setUIFromWifi();
|
|
||||||
setUpWarningMessageQrScan();
|
|
||||||
|
|
||||||
ImageView qrImage = (ImageView) findViewById(R.id.wifi_qr_code);
|
|
||||||
|
|
||||||
// Replace all blacks with the background blue.
|
|
||||||
qrImage.setColorFilter(new LightingColorFilter(0xffffffff, getResources().getColor(R.color.swap_blue)));
|
|
||||||
|
|
||||||
Button useBluetooth = (Button) findViewById(R.id.btn_use_bluetooth);
|
Button useBluetooth = (Button) findViewById(R.id.btn_use_bluetooth);
|
||||||
useBluetooth.setOnClickListener(new Button.OnClickListener() {
|
useBluetooth.setOnClickListener(new Button.OnClickListener() {
|
||||||
@ -63,53 +41,5 @@ public class SendFDroidView extends SwapView {
|
|||||||
getActivity().sendFDroidBluetooth();
|
getActivity().sendFDroidBluetooth();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
|
|
||||||
onWifiStateChanged, new IntentFilter(WifiStateChangeService.BROADCAST));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpWarningMessageQrScan() {
|
|
||||||
final View qrWarningMessage = findViewById(R.id.warning_qr_scanner);
|
|
||||||
final boolean hasAutofocus = CameraCharacteristicsChecker.getInstance(getContext()).hasAutofocus();
|
|
||||||
final int visiblity = hasAutofocus ? GONE : VISIBLE;
|
|
||||||
qrWarningMessage.setVisibility(visiblity);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove relevant listeners/receivers/etc so that they do not receive and process events
|
|
||||||
* when this view is not in use.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void onDetachedFromWindow() {
|
|
||||||
super.onDetachedFromWindow();
|
|
||||||
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onWifiStateChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("HardwareIds")
|
|
||||||
private void setUIFromWifi() {
|
|
||||||
if (TextUtils.isEmpty(FDroidApp.repo.address)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String scheme = Preferences.get().isLocalRepoHttpsEnabled() ? "https://" : "http://";
|
|
||||||
|
|
||||||
// the fingerprint is not useful on the button label
|
|
||||||
String qrUriString = scheme + FDroidApp.ipAddressString + ":" + FDroidApp.port;
|
|
||||||
TextView ipAddressView = (TextView) findViewById(R.id.device_ip_address);
|
|
||||||
ipAddressView.setText(qrUriString);
|
|
||||||
|
|
||||||
Utils.debugLog(TAG, "Encoded swap URI in QR Code: " + qrUriString);
|
|
||||||
new QrGenAsyncTask(getActivity(), R.id.wifi_qr_code).execute(qrUriString);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private final BroadcastReceiver onWifiStateChanged = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
setUIFromWifi();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,9 @@ import android.content.ComponentName;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
|
import android.graphics.LightingColorFilter;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@ -34,6 +36,7 @@ import android.view.MenuInflater;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import cc.mvdan.accesspoint.WifiApControl;
|
import cc.mvdan.accesspoint.WifiApControl;
|
||||||
@ -43,6 +46,7 @@ import org.fdroid.fdroid.BuildConfig;
|
|||||||
import org.fdroid.fdroid.FDroidApp;
|
import org.fdroid.fdroid.FDroidApp;
|
||||||
import org.fdroid.fdroid.NfcHelper;
|
import org.fdroid.fdroid.NfcHelper;
|
||||||
import org.fdroid.fdroid.Preferences;
|
import org.fdroid.fdroid.Preferences;
|
||||||
|
import org.fdroid.fdroid.QrGenAsyncTask;
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.Apk;
|
import org.fdroid.fdroid.data.Apk;
|
||||||
@ -56,10 +60,14 @@ import org.fdroid.fdroid.localrepo.SwapView;
|
|||||||
import org.fdroid.fdroid.localrepo.peers.Peer;
|
import org.fdroid.fdroid.localrepo.peers.Peer;
|
||||||
import org.fdroid.fdroid.net.BluetoothDownloader;
|
import org.fdroid.fdroid.net.BluetoothDownloader;
|
||||||
import org.fdroid.fdroid.net.HttpDownloader;
|
import org.fdroid.fdroid.net.HttpDownloader;
|
||||||
|
import org.fdroid.fdroid.net.WifiStateChangeService;
|
||||||
|
import org.fdroid.fdroid.views.swap.device.camera.CameraCharacteristicsChecker;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
||||||
@ -328,10 +336,20 @@ public class SwapWorkflowActivity extends AppCompatActivity {
|
|||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
|
localBroadcastManager.registerReceiver(onWifiStateChanged,
|
||||||
|
new IntentFilter(WifiStateChangeService.BROADCAST));
|
||||||
|
|
||||||
checkIncomingIntent();
|
checkIncomingIntent();
|
||||||
showRelevantView();
|
showRelevantView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
|
||||||
|
localBroadcastManager.unregisterReceiver(onWifiStateChanged);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether incoming {@link Intent} is a swap repo, and ensure that
|
* Check whether incoming {@link Intent} is a swap repo, and ensure that
|
||||||
* it is a valid swap URL. The hostname can only be either an IP or
|
* it is a valid swap URL. The hostname can only be either an IP or
|
||||||
@ -486,6 +504,13 @@ public class SwapWorkflowActivity extends AppCompatActivity {
|
|||||||
container.addView(view);
|
container.addView(view);
|
||||||
supportInvalidateOptionsMenu();
|
supportInvalidateOptionsMenu();
|
||||||
|
|
||||||
|
switch (currentView.getLayoutResId()) {
|
||||||
|
case R.layout.swap_send_fdroid:
|
||||||
|
case R.layout.swap_wifi_qr:
|
||||||
|
setUpFromWifi();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return currentView;
|
return currentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -877,4 +902,71 @@ public class SwapWorkflowActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final BroadcastReceiver onWifiStateChanged = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
setUpFromWifi();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void setUpFromWifi() {
|
||||||
|
String scheme = Preferences.get().isLocalRepoHttpsEnabled() ? "https://" : "http://";
|
||||||
|
|
||||||
|
// the fingerprint is not useful on the button label
|
||||||
|
String buttonLabel = scheme + FDroidApp.ipAddressString + ":" + FDroidApp.port;
|
||||||
|
TextView ipAddressView = container.findViewById(R.id.device_ip_address);
|
||||||
|
if (ipAddressView != null) {
|
||||||
|
ipAddressView.setText(buttonLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
String qrUriString = null;
|
||||||
|
switch (currentView.getLayoutResId()) {
|
||||||
|
case R.layout.swap_send_fdroid:
|
||||||
|
qrUriString = buttonLabel;
|
||||||
|
break;
|
||||||
|
case R.layout.swap_wifi_qr:
|
||||||
|
Uri sharingUri = Utils.getSharingUri(FDroidApp.repo);
|
||||||
|
StringBuilder qrUrlBuilder = new StringBuilder(scheme);
|
||||||
|
qrUrlBuilder.append(sharingUri.getHost());
|
||||||
|
if (sharingUri.getPort() != 80) {
|
||||||
|
qrUrlBuilder.append(':');
|
||||||
|
qrUrlBuilder.append(sharingUri.getPort());
|
||||||
|
}
|
||||||
|
qrUrlBuilder.append(sharingUri.getPath());
|
||||||
|
boolean first = true;
|
||||||
|
|
||||||
|
Set<String> names = sharingUri.getQueryParameterNames();
|
||||||
|
for (String name : names) {
|
||||||
|
if (!"ssid".equals(name)) {
|
||||||
|
if (first) {
|
||||||
|
qrUrlBuilder.append('?');
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
qrUrlBuilder.append('&');
|
||||||
|
}
|
||||||
|
qrUrlBuilder.append(name.toUpperCase(Locale.ENGLISH));
|
||||||
|
qrUrlBuilder.append('=');
|
||||||
|
qrUrlBuilder.append(sharingUri.getQueryParameter(name).toUpperCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qrUriString = qrUrlBuilder.toString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageView qrImage = container.findViewById(R.id.wifi_qr_code);
|
||||||
|
if (qrUriString != null && qrImage != null) {
|
||||||
|
Utils.debugLog(TAG, "Encoded swap URI in QR Code: " + qrUriString);
|
||||||
|
new QrGenAsyncTask(SwapWorkflowActivity.this, R.id.wifi_qr_code).execute(qrUriString);
|
||||||
|
|
||||||
|
// Replace all blacks with the background blue.
|
||||||
|
qrImage.setColorFilter(new LightingColorFilter(0xffffffff, getResources().getColor(R.color.swap_blue)));
|
||||||
|
|
||||||
|
final View qrWarningMessage = container.findViewById(R.id.warning_qr_scanner);
|
||||||
|
if (CameraCharacteristicsChecker.getInstance(this).hasAutofocus()) {
|
||||||
|
qrWarningMessage.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
qrWarningMessage.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,30 +1,12 @@
|
|||||||
package org.fdroid.fdroid.views.swap;
|
package org.fdroid.fdroid.views.swap;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.graphics.LightingColorFilter;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import org.fdroid.fdroid.FDroidApp;
|
|
||||||
import org.fdroid.fdroid.Preferences;
|
|
||||||
import org.fdroid.fdroid.QrGenAsyncTask;
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.Utils;
|
|
||||||
import org.fdroid.fdroid.localrepo.SwapView;
|
import org.fdroid.fdroid.localrepo.SwapView;
|
||||||
import org.fdroid.fdroid.net.WifiStateChangeService;
|
|
||||||
import org.fdroid.fdroid.views.swap.device.camera.CameraCharacteristicsChecker;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class WifiQrView extends SwapView {
|
public class WifiQrView extends SwapView {
|
||||||
|
|
||||||
@ -50,13 +32,6 @@ public class WifiQrView extends SwapView {
|
|||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
setUIFromWifi();
|
|
||||||
setUpWarningMessageQrScan();
|
|
||||||
|
|
||||||
ImageView qrImage = (ImageView) findViewById(R.id.wifi_qr_code);
|
|
||||||
|
|
||||||
// Replace all blacks with the background blue.
|
|
||||||
qrImage.setColorFilter(new LightingColorFilter(0xffffffff, getResources().getColor(R.color.swap_blue)));
|
|
||||||
|
|
||||||
Button openQr = (Button) findViewById(R.id.btn_qr_scanner);
|
Button openQr = (Button) findViewById(R.id.btn_qr_scanner);
|
||||||
openQr.setOnClickListener(new Button.OnClickListener() {
|
openQr.setOnClickListener(new Button.OnClickListener() {
|
||||||
@ -65,79 +40,5 @@ public class WifiQrView extends SwapView {
|
|||||||
getActivity().initiateQrScan();
|
getActivity().initiateQrScan();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
|
|
||||||
onWifiStateChanged, new IntentFilter(WifiStateChangeService.BROADCAST));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpWarningMessageQrScan() {
|
|
||||||
final View qrWarnningMessage = findViewById(R.id.warning_qr_scanner);
|
|
||||||
final boolean hasAutofocus = CameraCharacteristicsChecker.getInstance(getContext()).hasAutofocus();
|
|
||||||
final int visiblity = hasAutofocus ? GONE : VISIBLE;
|
|
||||||
qrWarnningMessage.setVisibility(visiblity);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove relevant listeners/receivers/etc so that they do not receive and process events
|
|
||||||
* when this view is not in use.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void onDetachedFromWindow() {
|
|
||||||
super.onDetachedFromWindow();
|
|
||||||
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onWifiStateChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUIFromWifi() {
|
|
||||||
|
|
||||||
if (TextUtils.isEmpty(FDroidApp.repo.address)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String scheme = Preferences.get().isLocalRepoHttpsEnabled() ? "https://" : "http://";
|
|
||||||
|
|
||||||
// the fingerprint is not useful on the button label
|
|
||||||
String buttonLabel = scheme + FDroidApp.ipAddressString + ":" + FDroidApp.port;
|
|
||||||
TextView ipAddressView = (TextView) findViewById(R.id.device_ip_address);
|
|
||||||
ipAddressView.setText(buttonLabel);
|
|
||||||
|
|
||||||
Uri sharingUri = Utils.getSharingUri(FDroidApp.repo);
|
|
||||||
StringBuilder qrUrlBuilder = new StringBuilder(scheme);
|
|
||||||
qrUrlBuilder.append(sharingUri.getHost());
|
|
||||||
if (sharingUri.getPort() != 80) {
|
|
||||||
qrUrlBuilder.append(':');
|
|
||||||
qrUrlBuilder.append(sharingUri.getPort());
|
|
||||||
}
|
|
||||||
qrUrlBuilder.append(sharingUri.getPath());
|
|
||||||
boolean first = true;
|
|
||||||
|
|
||||||
Set<String> names = sharingUri.getQueryParameterNames();
|
|
||||||
for (String name : names) {
|
|
||||||
if (!"ssid".equals(name)) {
|
|
||||||
if (first) {
|
|
||||||
qrUrlBuilder.append('?');
|
|
||||||
first = false;
|
|
||||||
} else {
|
|
||||||
qrUrlBuilder.append('&');
|
|
||||||
}
|
|
||||||
qrUrlBuilder.append(name.toUpperCase(Locale.ENGLISH));
|
|
||||||
qrUrlBuilder.append('=');
|
|
||||||
qrUrlBuilder.append(sharingUri.getQueryParameter(name).toUpperCase(Locale.ENGLISH));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String qrUriString = qrUrlBuilder.toString();
|
|
||||||
Utils.debugLog(TAG, "Encoded swap URI in QR Code: " + qrUriString);
|
|
||||||
new QrGenAsyncTask(getActivity(), R.id.wifi_qr_code).execute(qrUriString);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private final BroadcastReceiver onWifiStateChanged = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
setUIFromWifi();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user