Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.joythis.android.distancebetweendates;
- import androidx.annotation.Nullable;
- import androidx.appcompat.app.AppCompatActivity;
- import android.content.Context;
- import android.content.Intent;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.Spinner;
- import android.widget.TextView;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.URL;
- import java.util.ArrayList;
- import javax.net.ssl.HttpsURLConnection;
- public class StarterActivity extends AppCompatActivity {
- String mRemoteContent = "";
- class MyAsyncTask extends AsyncTask<String, Void, String>{
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- mRemoteContent = "";
- }
- @Override
- protected String doInBackground(String... strings) {
- //return null;
- //consumeHttpsResource(SOURCE);
- String strHttpsContent = consumeHttpsResource(strings[0]);
- mRemoteContent = strHttpsContent;
- return strHttpsContent;
- }//doInBackground
- @Override
- protected void onPostExecute(String s) {
- //super.onPostExecute(s);
- populateSpinnerWithLinesFromOnlineTSV(
- mSpnDatesFromTheWeb,
- mRemoteContent
- );
- }
- }//AsyncTask
- Context mContext;
- Button mBtnRequestDate1, mBtnRequestDate2;
- TextView mTvDate1, mTvDate2;
- Button mBtnComputeDistance;
- ListView mLvFeedback; //vis
- ArrayAdapter<String> mAd;
- ArrayList<String> mAlComputedDistances; //data
- AmCalendar mDate1, mDate2;
- Button.OnClickListener mButtonClickHandler =
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int id = v.getId();
- switch(id){
- case R.id.idBtnRequestDate1:
- actionRequestDate1();
- break;
- case R.id.idBtnRequestDate2:
- actionRequestDate2();
- break;
- case R.id.idBtnComputeDistance:
- actionComputeDistance();
- break;
- }//switch
- }//onClick
- };//mButtonClickHandler
- public final
- static int
- CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE1 = 444;
- public final
- static int
- CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE2 = 888;
- public final static int DEFAULT_YEAR = 2020;
- public final static int DEFAULT_MONTH = 11;
- public final static int DEFAULT_DAY = 12;
- @Override
- protected void onActivityResult
- (int requestCode, //who is Android calling?
- int resultCode, //OK or CANCEL ?
- @Nullable Intent data //this will transport the "result(s)"
- )
- {
- super.onActivityResult(requestCode, resultCode, data);
- boolean bUserConfirmedDate = resultCode == RESULT_OK;
- boolean bUserCanceled = resultCode == RESULT_CANCELED;
- if (bUserConfirmedDate){
- //data extraction!
- boolean bIsThereDateToExtractFrom = data!=null;
- if (bIsThereDateToExtractFrom){
- //extraction time!
- int y, m, d;
- y = data.getIntExtra(
- DateInputActivity.KEY_YEAR,
- DEFAULT_YEAR
- );
- m = data.getIntExtra(
- DateInputActivity.KEY_MONTH,
- DEFAULT_MONTH
- );
- d = data.getIntExtra(
- DateInputActivity.KEY_DAY,
- DEFAULT_DAY
- );
- String strDate = String.format(
- "%d-%d-%d", y, m, d
- );
- //end of extraction
- switch(requestCode){
- case CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE1:
- //TODO
- //code to display the recv date in mTvDate1
- mTvDate1.setText(strDate);
- mDate1 = new AmCalendar(y,m,d);
- break;
- //TODO
- case CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE2:
- //code to display the recv date in mTvDate2
- mTvDate2.setText(strDate);
- mDate2 = new AmCalendar(y,m,d);
- break;
- }//switch
- }//if there is data to extract from
- if (mDate1!=null && mDate2!=null){
- mBtnComputeDistance.setEnabled(true);
- }//if
- }//the user did NOT cancel, but CONFIRMED / OKed the response
- }//onActivityResult
- void actionRequestDate1(){
- Intent intentToGoPickSomeDateViaDateInputActivity =
- new Intent(
- this,
- DateInputActivity.class
- );
- //startActivity(intentToGoPickSomeDateViaDateInputActivity);
- startActivityForResult(
- intentToGoPickSomeDateViaDateInputActivity,
- CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE1
- );
- }//actionRequestDate1
- void actionRequestDate2(){
- Intent intentToGoPickSomeDateViaDateInputActivity =
- new Intent(
- this,
- DateInputActivity.class
- );
- //startActivity(intentToGoPickSomeDateViaDateInputActivity);
- startActivityForResult(
- intentToGoPickSomeDateViaDateInputActivity,
- CALL_ME_ON_THIS_CODE_WHEN_YOU_HAVE_DATE2
- );
- }//actionRequestDate2
- void actionComputeDistance(){
- boolean bCanEnableComputeDistance =
- mDate1!=null & mDate2!=null;
- if (bCanEnableComputeDistance){
- int iDistanceInDays =
- mDate1.distanceInDaysToOtherAmCalendar(mDate2);
- /*
- int iDistanceInDays =
- mDate2.distanceInDaysToOtherAmCalendar(mDate1);
- */
- String strMsg = getString(
- R.string.strDistanceBetweenDays,
- mDate1.toString(),
- mDate2.toString(),
- iDistanceInDays
- );
- mAlComputedDistances.add(0, strMsg);
- mAd.notifyDataSetChanged();
- }//if
- }//actionComputeDistance
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_starter_rl);
- init();
- }//onCreate
- Spinner mSpnDatesFromTheWeb;
- void init(){
- mContext = this;
- mSpnDatesFromTheWeb = findViewById(R.id.idSpnDatesFromTheWeb);
- //DO NOT!
- //android.os.NetworkOnMainThreadException
- /*
- populateSpinnerWithLinesFromOnlineTSV(
- mSpnDatesFromTheWeb,
- consumeHttpsResource(SOURCE)
- );
- */
- //do it async
- MyAsyncTask t = new MyAsyncTask();
- t.execute(SOURCE);
- mBtnRequestDate1 = findViewById(R.id.idBtnRequestDate1);
- mBtnRequestDate2 = findViewById(R.id.idBtnRequestDate2);
- mTvDate1 = findViewById(R.id.idTvDate1);
- mTvDate2 = findViewById(R.id.idTvDate2);
- mBtnComputeDistance =
- findViewById(R.id.idBtnComputeDistance);
- mLvFeedback = findViewById(R.id.idLvFeedback);
- mAlComputedDistances = new ArrayList<>();
- mAd = new ArrayAdapter<>(
- mContext,
- android.R.layout.simple_list_item_1,
- mAlComputedDistances
- );
- mLvFeedback.setAdapter(mAd);
- Button[] aBtns = {
- mBtnRequestDate1,
- mBtnRequestDate2,
- mBtnComputeDistance
- };
- for (Button b : aBtns){
- b.setOnClickListener(mButtonClickHandler);
- }//for
- //makes the Button ignore any user input
- mBtnComputeDistance.setEnabled(false);
- }//init
- /*
- TODO: put it in AmUtil?
- */
- void populateSpinnerWithLinesFromOnlineTSV(
- Spinner pSpn,
- String pOnlineTSVContent
- ){
- String[] aLinesFromTheWWW = pOnlineTSVContent.split("\n");
- ArrayAdapter<String> ad = new ArrayAdapter<>(
- mContext,
- android.R.layout.simple_spinner_item,
- aLinesFromTheWWW
- );
- ad.setDropDownViewResource(
- android.R.layout.simple_spinner_dropdown_item
- );
- pSpn.setAdapter(ad);
- }//populateSpinnerWithLinesFromOnlineTSV
- public final static String SOURCE =
- "https://arturmarques.com/edu/pdm2/dates.TSV";
- public String consumeHttpsResource(
- String pUrl
- ){
- try{
- URL url = new URL(pUrl);
- HttpsURLConnection httpsCon =
- (HttpsURLConnection)url.openConnection();
- InputStream is = httpsCon.getInputStream();
- InputStreamReader isr = new InputStreamReader(is);
- char c; int iByte; String strAll = "";
- while((iByte=isr.read())!=-1){
- c = (char)iByte;
- strAll += c;
- }//while
- isr.close();
- is.close();
- httpsCon.disconnect();
- return strAll;
- }//try
- catch (Exception e){
- Log.e(
- getClass().getName(),
- e.toString()
- );
- }//catch
- return "";
- }//consumeHttpsResource
- }//StarterActivity
Advertisement
Add Comment
Please, Sign In to add comment