Last active
February 13, 2019 01:31
-
-
Save benktesh/ff8aec730c6bcd3dc9ba386bf190908a to your computer and use it in GitHub Desktop.
This file contains hidden or 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 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