From 76d52773a237da8fcae3670a959bbe2bfe609796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Parm=C3=A9nides=20GV?= Date: Thu, 3 Oct 2013 16:41:53 +0200 Subject: Switching provider offers all providers from list. This fixes bug #4004: With new progress bars branch, if user switches provider the list of providers is not complete. --- src/se/leap/bitmaskclient/ConfigurationWizard.java | 33 +++++++++++++--------- src/se/leap/bitmaskclient/Dashboard.java | 10 ++++++- .../leap/bitmaskclient/ProviderDetailFragment.java | 4 +-- .../leap/bitmaskclient/ProviderListFragment.java | 29 +++++++++++++++---- src/se/leap/leapclient/ProviderListAdapter.java | 10 +++++++ 5 files changed, 65 insertions(+), 21 deletions(-) (limited to 'src/se') diff --git a/src/se/leap/bitmaskclient/ConfigurationWizard.java b/src/se/leap/bitmaskclient/ConfigurationWizard.java index 5839816b..28a8a44a 100644 --- a/src/se/leap/bitmaskclient/ConfigurationWizard.java +++ b/src/se/leap/bitmaskclient/ConfigurationWizard.java @@ -31,6 +31,7 @@ import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.app.ListFragment; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; @@ -96,12 +97,18 @@ implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogIn if ( savedInstanceState == null ){ // TODO Some welcome screen? // We will need better flow control when we have more Fragments (e.g. user auth) - provider_list_fragment = new ProviderListFragment(); - - FragmentManager fragmentManager = getFragmentManager(); - fragmentManager.beginTransaction() - .add(R.id.configuration_wizard_layout, provider_list_fragment, getResources().getString(R.string.provider_list_fragment_tag)) - .commit(); + provider_list_fragment = ProviderListFragment.newInstance(); + Bundle arguments = new Bundle(); + int configuration_wizard_request_code = getIntent().getIntExtra(Dashboard.REQUEST_CODE, -1); + if(configuration_wizard_request_code == Dashboard.SWITCH_PROVIDER) { + arguments.putBoolean(ProviderListFragment.SHOW_ALL_PROVIDERS, true); + } + provider_list_fragment.setArguments(arguments); + + FragmentManager fragmentManager = getFragmentManager(); + fragmentManager.beginTransaction() + .replace(R.id.configuration_wizard_layout, provider_list_fragment, ProviderListFragment.TAG) + .commit(); } // TODO: If exposing deep links into your app, handle intents here. @@ -115,14 +122,14 @@ implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogIn FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() - .replace(R.id.configuration_wizard_layout, new_provider_list_fragment, getResources().getString(R.string.provider_list_fragment_tag)) + .replace(R.id.configuration_wizard_layout, new_provider_list_fragment, ProviderListFragment.TAG) .commit(); } private void setProviderList(ProviderListFragment new_provider_list_fragment) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() - .replace(R.id.configuration_wizard_layout, new_provider_list_fragment, getResources().getString(R.string.provider_list_fragment_tag)) + .replace(R.id.configuration_wizard_layout, new_provider_list_fragment, ProviderListFragment.TAG) .commit(); } @@ -150,7 +157,7 @@ implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogIn if(!mProgressBar.isShown()) { int provider_index = getProviderIndex(provider_id); startProgressBar(provider_index); - provider_list_fragment = (ProviderListFragment) getFragmentManager().findFragmentByTag(getResources().getString(R.string.provider_list_fragment_tag)); + provider_list_fragment = (ProviderListFragment) getFragmentManager().findFragmentByTag(ProviderListFragment.TAG); provider_list_fragment.hide(provider_index-2); //setProviderList(provider_list_fragment); } @@ -528,10 +535,10 @@ implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogIn } } - public void unhideAll() { - provider_list_fragment.unhideAll(); - setProviderList(provider_list_fragment); - refreshProviderList(0); + public void showAllProviders() { + provider_list_fragment = (ProviderListFragment) getFragmentManager().findFragmentByTag(ProviderListFragment.TAG); + if(provider_list_fragment != null) + provider_list_fragment.unhideAll(); } @Override diff --git a/src/se/leap/bitmaskclient/Dashboard.java b/src/se/leap/bitmaskclient/Dashboard.java index 5a2417ff..68b7d248 100644 --- a/src/se/leap/bitmaskclient/Dashboard.java +++ b/src/se/leap/bitmaskclient/Dashboard.java @@ -61,10 +61,12 @@ import android.widget.Toast; public class Dashboard extends Activity implements LogInDialog.LogInDialogInterface,Receiver { protected static final int CONFIGURE_LEAP = 0; + protected static final int SWITCH_PROVIDER = 1; private static final String TAG_EIP_FRAGMENT = "EIP_DASHBOARD_FRAGMENT"; final public static String SHARED_PREFERENCES = "LEAPPreferences"; final public static String ACTION_QUIT = "quit"; + public static final String REQUEST_CODE = "request_code"; private ProgressBar mProgressBar; private TextView eipStatus; @@ -225,7 +227,7 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf startActivity(intent); return true; case R.id.switch_provider: - startActivityForResult(new Intent(this,ConfigurationWizard.class),CONFIGURE_LEAP); + startActivityForResult(new Intent(this,ConfigurationWizard.class), SWITCH_PROVIDER); return true; case R.id.login_button: View view = ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0); @@ -403,6 +405,12 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf public static Context getAppContext() { return app; } + + @Override + public void startActivityForResult(Intent intent, int requestCode) { + intent.putExtra(Dashboard.REQUEST_CODE, requestCode); + super.startActivityForResult(intent, requestCode); + } public class ProviderAPIBroadcastReceiver_Update extends BroadcastReceiver { diff --git a/src/se/leap/bitmaskclient/ProviderDetailFragment.java b/src/se/leap/bitmaskclient/ProviderDetailFragment.java index 8ec7d154..fd8b29d9 100644 --- a/src/se/leap/bitmaskclient/ProviderDetailFragment.java +++ b/src/se/leap/bitmaskclient/ProviderDetailFragment.java @@ -87,7 +87,7 @@ public class ProviderDetailFragment extends DialogFragment { ConfigHelper.removeFromSharedPref(ProviderItem.DANGER_ON); ConfigHelper.removeFromSharedPref(EIP.ALLOWED_ANON); ConfigHelper.removeFromSharedPref(EIP.KEY); - interface_with_configuration_wizard.unhideAll(); + interface_with_configuration_wizard.showAllProviders(); } public static DialogFragment newInstance() { @@ -109,7 +109,7 @@ public class ProviderDetailFragment extends DialogFragment { public interface ProviderDetailFragmentInterface { public void login(); public void use_anonymously(); - public void unhideAll(); + public void showAllProviders(); } ProviderDetailFragmentInterface interface_with_configuration_wizard; diff --git a/src/se/leap/bitmaskclient/ProviderListFragment.java b/src/se/leap/bitmaskclient/ProviderListFragment.java index 8ccabd8f..61ed040a 100644 --- a/src/se/leap/bitmaskclient/ProviderListFragment.java +++ b/src/se/leap/bitmaskclient/ProviderListFragment.java @@ -19,6 +19,7 @@ import se.leap.bitmaskclient.R; import se.leap.bitmaskclient.ProviderListContent.ProviderItem; import android.app.Activity; +import android.app.DialogFragment; import android.app.ListFragment; import android.os.Bundle; import android.view.LayoutInflater; @@ -37,6 +38,9 @@ import android.widget.ListView; */ public class ProviderListFragment extends ListFragment { + public static String TAG = "provider_list_fragment"; + public static String SHOW_ALL_PROVIDERS = "show_all_providers"; + private ProviderListAdapter content_adapter; /** @@ -88,10 +92,17 @@ public class ProviderListFragment extends ListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - content_adapter = new ProviderListAdapter( - getActivity(), - android.R.layout.simple_list_item_activated_2, - ProviderListContent.ITEMS); + if(getArguments().containsKey(SHOW_ALL_PROVIDERS)) + content_adapter = new ProviderListAdapter( + getActivity(), + android.R.layout.simple_list_item_activated_2, + ProviderListContent.ITEMS, getArguments().getBoolean(SHOW_ALL_PROVIDERS)); + else + content_adapter = new ProviderListAdapter( + getActivity(), + android.R.layout.simple_list_item_activated_2, + ProviderListContent.ITEMS); + setListAdapter(content_adapter); } @@ -192,6 +203,14 @@ public class ProviderListFragment extends ListFragment { } public void unhideAll() { - content_adapter.unHideAll(); + if(content_adapter != null) + content_adapter.unHideAll(); } + + /** + * @return a new instance of this ListFragment. + */ + public static ProviderListFragment newInstance() { + return new ProviderListFragment(); + } } diff --git a/src/se/leap/leapclient/ProviderListAdapter.java b/src/se/leap/leapclient/ProviderListAdapter.java index e8782130..baaa10ba 100644 --- a/src/se/leap/leapclient/ProviderListAdapter.java +++ b/src/se/leap/leapclient/ProviderListAdapter.java @@ -70,6 +70,16 @@ public class ProviderListAdapter extends ArrayAdapter { hidden[i] = false; } } + + public ProviderListAdapter(Context mContext, int layout, List objects, boolean show_all_providers) { + super(mContext, layout, objects); + items = objects.toArray((T[])new Object[0]); + if(show_all_providers) { + hidden = new boolean[items.length]; + for (int i = 0; i < items.length; i++) + hidden[i] = false; + } + } @Override public void add(T item) { -- cgit v1.2.3