Skip to content

Instantly share code, notes, and snippets.

@benktesh
Last active February 13, 2019 01:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benktesh/ff8aec730c6bcd3dc9ba386bf190908a to your computer and use it in GitHub Desktop.
Save benktesh/ff8aec730c6bcd3dc9ba386bf190908a to your computer and use it in GitHub Desktop.
package benktesh.smartstock;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.ArrayList;
import benktesh.smartstock.Model.Stock;
import benktesh.smartstock.UI.CommonUIHelper;
import benktesh.smartstock.UI.StockDetailActivity;
import benktesh.smartstock.Utils.MarketAdapter;
import benktesh.smartstock.Utils.NetworkUtilities;
import benktesh.smartstock.Utils.PortfolioAdapter;
import benktesh.smartstock.Utils.SmartStockConstant;
public class MainActivity extends AppCompatActivity implements
MarketAdapter.ListItemClickListener, PortfolioAdapter.ListItemClickListener {
private static final String TAG = MainActivity.class.getSimpleName();
CommonUIHelper mCommonUIHelper;
ArrayList<Stock> mMarketData;
private Toast mToast;
//The following are for market summary
private MarketAdapter mAdapter;
private RecyclerView mMarketRV;
private ProgressBar spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
spinner = findViewById(R.id.progressbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent Email = new Intent(Intent.ACTION_SEND);
Email.setType(getString(R.string.label_emailtype));
Email.putExtra(Intent.EXTRA_EMAIL,
new String[]{getString(R.string.label_developer_contat_email)}); //developer 's email
Email.putExtra(Intent.EXTRA_SUBJECT,
R.string.label_feedback_subject); // Email 's Subject
Email.putExtra(Intent.EXTRA_TEXT, getString(R.string.label_address_developer) + ""); //Email 's Greeting text
startActivity(Intent.createChooser(Email, getString(R.string.label_send_feedback)));
}
});
if (mCommonUIHelper == null) {
mCommonUIHelper = new CommonUIHelper(this);
}
mMarketRV = findViewById(R.id.rv_market_summary);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mMarketRV.setLayoutManager(layoutManager);
mMarketRV.setHasFixedSize(true);
mAdapter = new MarketAdapter(mMarketData, this);
mMarketRV.setAdapter(mAdapter);
LoadView();
}
private void LoadView() {
Log.d(TAG, "Getting Market Data Async");
new NetworkQueryTask().execute(SmartStockConstant.QueryMarket);
}
private void MakeToast(String msg) {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
public boolean onCreateOptionsMenu(Menu menu) {
return mCommonUIHelper.ConfigureSearchFromMenu(menu);
}
@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.
if (mCommonUIHelper.MakeMenu(item)) return true;
return super.onOptionsItemSelected(item);
}
@Override
public void onListItemClick(Stock data) {
if (mToast != null) {
mToast.cancel();
}
Intent intent = new Intent(this.getApplicationContext(), StockDetailActivity.class);
intent.putExtra(SmartStockConstant.ParcelableStock, data);
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
startActivity(intent, bundle);
}
/*
This is an async task that fetches data from network and new data is applied to adapter.
Also makes a long toast message when fails to retrieve information from the network
It takes void, void and returns ArrayList<?>
*/
class NetworkQueryTask extends AsyncTask<String, Integer, ArrayList<Stock>> {
private String query;
@Override
protected void onPreExecute() {
if (spinner != null) {
spinner.setVisibility(View.VISIBLE);
}
}
@Override
protected ArrayList<Stock> doInBackground(String... params) {
query = params[0];
ArrayList<Stock> searchResults = null;
try {
searchResults = NetworkUtilities.getStockData(getApplicationContext(), query);
for (int i = 0; i <= 100; i = i + 25) {
Thread.sleep(500);
publishProgress(i);
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
return searchResults;
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
Toast.makeText(getApplicationContext(), "Progress: " + progress[0] + "(%)", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(ArrayList<Stock> searchResults) {
super.onPostExecute(searchResults);
if (searchResults != null && searchResults.size() != 0) {
mAdapter.resetData(searchResults);
}
if (spinner.getVisibility() == View.VISIBLE) {
spinner.setVisibility(View.GONE);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment