package com.joinmarrow.marrow; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import com.joinmarrow.marrow.tasks.AddLink; import com.joinmarrow.marrow.tasks.GetBoneTask; import com.joinmarrow.marrow.tasks.GetSubscriptions; import com.joinmarrow.marrow.tasks.LogonTask; import org.jdeferred.Deferred; import org.jdeferred.DoneCallback; import org.jdeferred.FailCallback; import org.jdeferred.impl.DeferredObject; import java.util.ArrayList; import java.util.List; import us.monoid.json.JSONArray; import us.monoid.json.JSONException; public class MarrowActivity extends ActionBarActivity { private TextView userNameText; private ListView linkList; private String marrowSite; public SharedPreferences sharedPref; private class MarrowItem { public String iTitle; public String iUrl; public MarrowItem(String title, String url) { iTitle = title; iUrl = url; } public String toString() { return iTitle; } } private List<MarrowItem> linkData = new ArrayList<MarrowItem>(); private class MarrowSite { private String url; private List<MarrowItem> data; public MarrowSite(String siteUrl, List<Marrow> linkData) { url = siteUrl; data = linkData; } private Deferred<JSONArray, Void, Void> getBone(String uname) { Deferred<JSONArray, Void, Void> d = new DeferredObject(); d.done(new DoneCallback<JSONArray>() { @Override public void onDone(JSONArray result) { data.clear(); for (int x = 0; x < result.length(); x++) { try { data.add(new MarrowItem( result.getJSONObject(x).getString("title"), result.getJSONObject(x).getString("url") )); } catch (JSONException e) { e.printStackTrace(); } } ListView linkList = (ListView) findViewById(R.id.linkList); ((ArrayAdapter<String>) linkList.getAdapter()).notifyDataSetChanged(); } }); new GetBoneTask(d, url).execute(uname); return d; } private Deferred<JSONArray, Void, Void> getSubscriptions() { Deferred<JSONArray, Void, Void> d = new DeferredObject<JSONArray, Void, Void>(); d.done(new DoneCallback<JSONArray>() { @Override public void onDone(JSONArray data) { linkData.clear(); for (int x = 0; x < data.length(); x++) { try { linkData.add( new MarrowItem( data.getJSONObject(x).getString("title"), data.getJSONObject(x).getString("url") ) ); } catch (JSONException e) { e.printStackTrace(); } } ListView linkList = (ListView) findViewById(R.id.linkList); ((ArrayAdapter<String>) linkList.getAdapter()).notifyDataSetChanged(); } }); new GetSubscriptions(d, url).execute(); return d; } private Deferred<Boolean, Void, Void> doLogin(String username, String password) { Deferred<Boolean, Void, Void> waitForLogon = new DeferredObject(); new LogonTask(waitForLogon, marrowSite).execute(username, password); return waitForLogon; } } public void goButtonClicked(View view) { String userName = userNameText.getText().toString().trim(); getBone(userName); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(userNameText.getWindowToken(), 0); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_marrow); userNameText = (TextView) findViewById(R.id.userName); userNameText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean result = false; if (v.getText() != "") { goButtonClicked(v); result = true; } return result; } }); linkList = (ListView) findViewById(R.id.linkList); linkList.setAdapter( new ArrayAdapter<MarrowItem>( this, android.R.layout.simple_list_item_1, linkData ) ); linkList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { MarrowItem item = linkData.get(position); Log.i("Marrow", item.iUrl); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.iUrl)); startActivity(browserIntent); } }); final MarrowActivity self = this; sharedPref = PreferenceManager.getDefaultSharedPreferences(this); String username = sharedPref.getString("username", "test"); String password = sharedPref.getString("password", ""); marrowSite = sharedPref.getString("site", "https://joinmarrow.com"); if (! password.equals("")) { doLogin(username, password).done(new DoneCallback<Boolean>() { @Override public void onDone(Boolean success) { if (success) { getSubscriptions(); } else { startActivity(new Intent(self, LoginActivity.class)); } } }).fail(new FailCallback<Void>() { @Override public void onFail(Void result) { getBone(username); } }); } SharedPreferences.OnSharedPreferenceChangeListener spl = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.i("marrow", key); if (key.equals("username")) { username = sharedPreferences.getString("username", ""); } else if (key.equals("password")) { Log.i("marrow", "changing Password"); password = sharedPreferences.getString("password", ""); doLogin(username, password).done(new DoneCallback<Boolean>() { @Override public void onDone(Boolean result) { if (result) { getSubscriptions(); } else { startActivity(new Intent(self, LoginActivity.class)); } } }); } else if (key.equals("marrowSite")) { marrowSite = sharedPreferences.getString("site", "https://joinmarrow.com"); } } }; sharedPref.registerOnSharedPreferenceChangeListener(spl); Intent intent = getIntent(); String action = intent.getAction(); String type= intent.getType(); if (Intent.ACTION_SEND.equals(action)) { String text = intent.getStringExtra(Intent.EXTRA_TEXT); if (text != null) { new AddLink(new DeferredObject(), marrowSite).execute(text, ""); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_marrow, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { startActivity(new Intent(this, SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } }