package se.leap.leapclient; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; import java.util.Scanner; import org.json.JSONException; import org.json.JSONObject; import se.leap.leapclient.ProviderAPIResultReceiver.Receiver; import se.leap.leapclient.ProviderListContent.ProviderItem; import android.app.Activity; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; import android.content.res.AssetManager; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Toast; /** * An activity representing a list of Providers. This activity * has different presentations for handset and tablet-size devices. On * handsets, the activity presents a list of items, which when touched, * lead to a {@link DashboardActivity} representing * item details. On tablets, the activity presents the list of items and * item details side-by-side using two vertical panes. *
* The activity makes heavy use of fragments. The list of items is a * {@link ProviderListFragment} and the item details * (if present) is a {@link DashboardFragment}. *
* This activity also implements the required
* {@link ProviderListFragment.Callbacks} interface
* to listen for item selections.
*/
public class ConfigurationWizard extends Activity
implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogInterface, Receiver {
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private boolean mTwoPane;
public ProviderAPIResultReceiver providerAPI_result_receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration_wizard);
ConfigHelper.setSharedPreferences(getSharedPreferences(ConfigHelper.PREFERENCES_KEY, MODE_PRIVATE));
loadPreseededProviders();
if(ConfigHelper.getKeystore() == null) {
InputStream keystore_input_stream = getResources().openRawResource(R.raw.leapkeystore);
ConfigHelper.getNewKeystore(keystore_input_stream);
}
// Only create our fragments if we're not restoring a saved instance
if ( savedInstanceState == null ){
// TODO Some welcome screen?
// We will need better flow control when we have more Fragments (e.g. user auth)
ProviderListFragment providerList = new ProviderListFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.configuration_wizard_layout, providerList, "providerlist")
.commit();
}
// TODO: If exposing deep links into your app, handle intents here.
}
private void loadPreseededProviders() {
AssetManager asset_manager = getAssets();
String[] urls_filepaths = null;
try {
String url_files_folder = "urls";
//TODO Put that folder in a better place (also inside the "for")
urls_filepaths = asset_manager.list(url_files_folder);
String provider_name = "";
for(String url_filepath : urls_filepaths)
{
boolean custom = false;
provider_name = url_filepath.subSequence(0, url_filepath.indexOf(".")).toString();
if(ProviderListContent.ITEMS.isEmpty()) //TODO I have to implement a way of checking if a provider new or is already present in that ITEMS list
ProviderListContent.addItem(new ProviderItem(provider_name, asset_manager.open(url_files_folder + "/" + url_filepath), custom, true)); // By default, it trusts the provider
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Callback method from {@link ProviderListFragment.Callbacks}
* indicating that the item with the given ID was selected.
*/
@Override
public void onItemSelected(String id) {
if (mTwoPane) {
// TODO Hmmm...is this how we should do this? What if it /is/ two pane?
} else {
// In single-pane mode, simply start the detail activity
// for the selected item ID.
Iterator