Created
April 26, 2017 09:10
-
-
Save AyatKhraisat/f8dced55411d46e5272ad57285203944 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.udacity.stockhawk.ui; | |
import android.content.Context; | |
import android.database.Cursor; | |
import android.net.ConnectivityManager; | |
import android.net.NetworkInfo; | |
import android.os.AsyncTask; | |
import android.os.Bundle; | |
import android.support.v4.app.LoaderManager; | |
import android.support.v4.content.CursorLoader; | |
import android.support.v4.content.Loader; | |
import android.support.v4.widget.SwipeRefreshLayout; | |
import android.support.v7.app.AppCompatActivity; | |
import android.support.v7.widget.LinearLayoutManager; | |
import android.support.v7.widget.RecyclerView; | |
import android.support.v7.widget.helper.ItemTouchHelper; | |
import android.view.Menu; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import com.udacity.stockhawk.R; | |
import com.udacity.stockhawk.data.Contract; | |
import com.udacity.stockhawk.data.PrefUtils; | |
import com.udacity.stockhawk.sync.QuoteSyncJob; | |
import java.io.IOException; | |
import butterknife.BindView; | |
import butterknife.ButterKnife; | |
import timber.log.Timber; | |
import yahoofinance.Stock; | |
import yahoofinance.YahooFinance; | |
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>, | |
SwipeRefreshLayout.OnRefreshListener, | |
StockAdapter.StockAdapterOnClickHandler { | |
private static final int STOCK_LOADER = 0; | |
@SuppressWarnings("WeakerAccess") | |
@BindView(R.id.recycler_view) | |
RecyclerView stockRecyclerView; | |
@SuppressWarnings("WeakerAccess") | |
@BindView(R.id.swipe_refresh) | |
SwipeRefreshLayout swipeRefreshLayout; | |
@SuppressWarnings("WeakerAccess") | |
@BindView(R.id.error) | |
TextView error; | |
private StockAdapter adapter; | |
@Override | |
public void onClick(String symbol) { | |
Timber.d("Symbol clicked: %s", symbol); | |
} | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
adapter = new StockAdapter(this, this); | |
stockRecyclerView.setAdapter(adapter); | |
stockRecyclerView.setLayoutManager(new LinearLayoutManager(this)); | |
swipeRefreshLayout.setOnRefreshListener(this); | |
swipeRefreshLayout.setRefreshing(true); | |
onRefresh(); | |
QuoteSyncJob.initialize(this); | |
getSupportLoaderManager().initLoader(STOCK_LOADER, null, this); | |
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { | |
@Override | |
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { | |
return false; | |
} | |
@Override | |
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { | |
String symbol = adapter.getSymbolAtPosition(viewHolder.getAdapterPosition()); | |
PrefUtils.removeStock(MainActivity.this, symbol); | |
getContentResolver().delete(Contract.Quote.makeUriForStock(symbol), null, null); | |
} | |
}).attachToRecyclerView(stockRecyclerView); | |
} | |
private boolean networkUp() { | |
ConnectivityManager cm = | |
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); | |
NetworkInfo networkInfo = cm.getActiveNetworkInfo(); | |
return networkInfo != null && networkInfo.isConnectedOrConnecting(); | |
} | |
@Override | |
public void onRefresh() { | |
QuoteSyncJob.syncImmediately(this); | |
if (!networkUp() && adapter.getItemCount() == 0) { | |
swipeRefreshLayout.setRefreshing(false); | |
error.setText(getString(R.string.error_no_network)); | |
error.setVisibility(View.VISIBLE); | |
} else if (!networkUp()) { | |
swipeRefreshLayout.setRefreshing(false); | |
Toast.makeText(this, R.string.toast_no_connectivity, Toast.LENGTH_LONG).show(); | |
} else if (PrefUtils.getStocks(this).size() == 0) { | |
swipeRefreshLayout.setRefreshing(false); | |
error.setText(getString(R.string.error_no_stocks)); | |
error.setVisibility(View.VISIBLE); | |
} else { | |
error.setVisibility(View.GONE); | |
} | |
} | |
public void button(@SuppressWarnings("UnusedParameters") View view) { | |
new AddStockDialog().show(getFragmentManager(), "StockDialogFragment"); | |
} | |
void addStock(String symbol) throws IOException { | |
if (symbol != null && !symbol.isEmpty()) { | |
new CheckAsynck().execute(symbol); | |
} | |
} | |
@Override | |
public Loader<Cursor> onCreateLoader(int id, Bundle args) { | |
return new CursorLoader(this, | |
Contract.Quote.URI, | |
Contract.Quote.QUOTE_COLUMNS.toArray(new String[]{}), | |
null, null, Contract.Quote.COLUMN_SYMBOL); | |
} | |
@Override | |
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { | |
swipeRefreshLayout.setRefreshing(false); | |
if (data.getCount() != 0) { | |
error.setVisibility(View.GONE); | |
} | |
adapter.setCursor(data); | |
} | |
@Override | |
public void onLoaderReset(Loader<Cursor> loader) { | |
swipeRefreshLayout.setRefreshing(false); | |
adapter.setCursor(null); | |
} | |
private void setDisplayModeMenuItemIcon(MenuItem item) { | |
if (PrefUtils.getDisplayMode(this) | |
.equals(getString(R.string.pref_display_mode_absolute_key))) { | |
item.setIcon(R.drawable.ic_percentage); | |
} else { | |
item.setIcon(R.drawable.ic_dollar); | |
} | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
getMenuInflater().inflate(R.menu.main_activity_settings, menu); | |
MenuItem item = menu.findItem(R.id.action_change_units); | |
setDisplayModeMenuItemIcon(item); | |
return true; | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
int id = item.getItemId(); | |
if (id == R.id.action_change_units) { | |
PrefUtils.toggleDisplayMode(this); | |
setDisplayModeMenuItemIcon(item); | |
adapter.notifyDataSetChanged(); | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
class CheckAsynck extends AsyncTask<String, Void, Boolean> { | |
String symbol; | |
@Override | |
protected Boolean doInBackground(String... params) { | |
Stock stock = null; | |
symbol = params[0]; | |
try { | |
stock = YahooFinance.get(params[0]); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
if (stock.getName() == null) | |
return false; | |
else | |
return true; | |
} | |
@Override | |
protected void onPostExecute(Boolean aBoolean) { | |
super.onPostExecute(aBoolean); | |
if (!aBoolean) | |
Toast.makeText(MainActivity.this, "THe Stock not Available", Toast.LENGTH_LONG).show(); | |
else { | |
try { | |
if (networkUp()) { | |
swipeRefreshLayout.setRefreshing(true); | |
} else { | |
String message = getString(R.string.toast_stock_added_no_connectivity, symbol); | |
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); | |
PrefUtils.addStock(MainActivity.this, symbol); | |
QuoteSyncJob.syncImmediately(MainActivity.this); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment