From 1fd6e447afa4d8a028ece2de12e00cfac7f867b1 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Sat, 23 May 2015 00:46:40 +1000 Subject: [PATCH] WIP: Refactored join wifi fragment into view. There is quite a lot of business logic that was moved directly from the fragment to the view. Before this feature is complete, that logic should either be moved into the activity, or into some sort of associated Presenter class for the JoinWifiView. --- F-Droid/res/layout/swap_join_wifi.xml | 4 +- .../views/swap/SwapWorkflowActivity.java | 8 ++ .../fdroid/views/swap/views/JoinWifiView.java | 120 ++++++++++++++++++ 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 F-Droid/src/org/fdroid/fdroid/views/swap/views/JoinWifiView.java diff --git a/F-Droid/res/layout/swap_join_wifi.xml b/F-Droid/res/layout/swap_join_wifi.xml index b59f544d1..0c9e48bc0 100644 --- a/F-Droid/res/layout/swap_join_wifi.xml +++ b/F-Droid/res/layout/swap_join_wifi.xml @@ -1,6 +1,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java b/F-Droid/src/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java index 33f41643a..90acca56f 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java @@ -49,6 +49,7 @@ public class SwapWorkflowActivity extends FragmentActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { + menu.clear(); boolean parent = super.onPrepareOptionsMenu(menu); boolean inner = currentView.buildMenu(menu, getMenuInflater()); return parent || inner; @@ -106,6 +107,13 @@ public class SwapWorkflowActivity extends FragmentActivity { inflateInnerView(R.layout.swap_join_wifi); } + public void onJoinWifiComplete() { + /*ensureLocalRepoRunning(); + if (!attemptToShowNfc()) { + showWifiQr(); + }*/ + } + class UpdateAsyncTask extends AsyncTask { @SuppressWarnings("UnusedDeclaration") diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/views/JoinWifiView.java b/F-Droid/src/org/fdroid/fdroid/views/swap/views/JoinWifiView.java new file mode 100644 index 000000000..653db430b --- /dev/null +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/views/JoinWifiView.java @@ -0,0 +1,120 @@ +package org.fdroid.fdroid.views.swap.views; + +import android.annotation.TargetApi; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.v4.content.LocalBroadcastManager; +import android.support.v4.view.MenuItemCompat; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import org.fdroid.fdroid.FDroidApp; +import org.fdroid.fdroid.R; +import org.fdroid.fdroid.net.WifiStateChangeService; +import org.fdroid.fdroid.views.swap.SwapWorkflowActivity; + +public class JoinWifiView extends RelativeLayout implements SwapWorkflowActivity.InnerView { + + public JoinWifiView(Context context) { + super(context); + } + + public JoinWifiView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public JoinWifiView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public JoinWifiView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + private SwapWorkflowActivity getActivity() { + // TODO: Try and find a better way to get to the SwapActivity, which makes less asumptions. + return (SwapWorkflowActivity)getContext(); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openAvailableNetworks(); + } + }); + refreshWifiState(); + + // TODO: Listen for "Connecting..." state and reflect that in the view too. + LocalBroadcastManager.getInstance(getActivity()).registerReceiver( + new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + refreshWifiState(); + } + }, + new IntentFilter(WifiStateChangeService.BROADCAST) + ); + + } + + private void refreshWifiState() { + TextView descriptionView = (TextView) findViewById(R.id.text_description); + ImageView wifiIcon = (ImageView) findViewById(R.id.wifi_icon); + TextView ssidView = (TextView) findViewById(R.id.wifi_ssid); + TextView tapView = (TextView) findViewById(R.id.wifi_available_networks_prompt); + if (TextUtils.isEmpty(FDroidApp.bssid) && !TextUtils.isEmpty(FDroidApp.ipAddressString)) { + // empty bssid with an ipAddress means hotspot mode + descriptionView.setText(R.string.swap_join_this_hotspot); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.hotspot)); + ssidView.setText(R.string.swap_active_hotspot); + tapView.setText(R.string.swap_switch_to_wifi); + } else if (TextUtils.isEmpty(FDroidApp.ssid)) { + // not connected to or setup with any wifi network + descriptionView.setText(R.string.swap_join_same_wifi); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.wifi)); + ssidView.setText(R.string.swap_no_wifi_network); + tapView.setText(R.string.swap_view_available_networks); + } else { + // connected to a regular wifi network + descriptionView.setText(R.string.swap_join_same_wifi); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.wifi)); + ssidView.setText(FDroidApp.ssid); + tapView.setText(R.string.swap_view_available_networks); + } + } + + private void openAvailableNetworks() { + getActivity().startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); + } + + @Override + public boolean buildMenu(Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.swap_next, menu); + MenuItem next = menu.findItem(R.id.action_next); + MenuItemCompat.setShowAsAction(next, MenuItemCompat.SHOW_AS_ACTION_ALWAYS | MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT); + next.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + getActivity().onJoinWifiComplete(); + return true; + } + }); + return true; + } +}