This shows you the differences between two versions of the page.
eim:colocvii:colocviu01 [2020/03/22 22:37] dragos.niculescu |
eim:colocvii:colocviu01 [2020/03/29 20:33] (current) andrei.bolojan |
||
---|---|---|---|
Line 19: | Line 19: | ||
Pentru rezolvarea subiectelor propuse în cadrul colocviului 1, sunt necesare: | Pentru rezolvarea subiectelor propuse în cadrul colocviului 1, sunt necesare: | ||
* un cont Github personal, pe care să existe drepturi de citire și de scriere; | * un cont Github personal, pe care să existe drepturi de citire și de scriere; | ||
- | * SDK-ul de Android (cu o imagine pentru nivelul de API 16 - Jelly Bean 4.1); | + | * SDK-ul de Android (cu o imagine pentru nivelul de API 24 - Nougat 7.0); |
* mediul de dezvoltare integrat Android Studio; | * mediul de dezvoltare integrat Android Studio; | ||
* un dispozitiv mobil: | * un dispozitiv mobil: | ||
Line 285: | Line 285: | ||
<file java PracticalTest01Activity.java> | <file java PracticalTest01Activity.java> | ||
- | package ro.pub.cs.systems.eim.practicaltest01; | + | package ro.pub.cs.systems.eim.practicaltest01.view; |
- | + | ||
- | import android.app.Activity; | + | import android.content.BroadcastReceiver; |
+ | import android.content.Context; | ||
import android.content.Intent; | import android.content.Intent; | ||
+ | import android.content.IntentFilter; | ||
+ | import android.support.v7.app.AppCompatActivity; | ||
import android.os.Bundle; | import android.os.Bundle; | ||
- | import android.view.Menu; | + | import android.util.Log; |
- | import android.view.MenuItem; | + | |
import android.view.View; | import android.view.View; | ||
import android.widget.Button; | import android.widget.Button; | ||
import android.widget.EditText; | import android.widget.EditText; | ||
import android.widget.Toast; | import android.widget.Toast; | ||
+ | |||
+ | import ro.pub.cs.systems.eim.practicaltest01.R; | ||
+ | import ro.pub.cs.systems.eim.practicaltest01.general.Constants; | ||
+ | import ro.pub.cs.systems.eim.practicaltest01.service.PracticalTest01Service; | ||
- | public class PracticalTest01MainActivity extends Activity { | + | public class PracticalTest01MainActivity extends AppCompatActivity { |
- | private EditText leftEditText = null; | + | private EditText leftEditText; |
- | private EditText rightEditText = null; | + | private EditText rightEditText; |
- | private Button leftButton = null; | + | private Button pressMeButton, pressMeTooButton; |
- | private Button rightButton = null; | + | |
@Override | @Override | ||
Line 311: | Line 316: | ||
leftEditText = (EditText)findViewById(R.id.left_edit_text); | leftEditText = (EditText)findViewById(R.id.left_edit_text); | ||
rightEditText = (EditText)findViewById(R.id.right_edit_text); | rightEditText = (EditText)findViewById(R.id.right_edit_text); | ||
+ | |||
+ | pressMeButton = (Button)findViewById(R.id.press_me_button); | ||
+ | pressMeTooButton = (Button)findViewById(R.id.press_me_too_button); | ||
+ | |||
leftEditText.setText(String.valueOf(0)); | leftEditText.setText(String.valueOf(0)); | ||
rightEditText.setText(String.valueOf(0)); | rightEditText.setText(String.valueOf(0)); | ||
- | | ||
- | leftButton = (Button)findViewById(R.id.left_button); | ||
- | rightButton = (Button)findViewById(R.id.right_button); | ||
- | } | ||
- | | ||
- | @Override | ||
- | public boolean onCreateOptionsMenu(Menu menu) { | ||
- | getMenuInflater().inflate(R.menu.practical_test01, menu); | ||
- | return true; | ||
- | } | ||
- | |||
- | @Override | ||
- | public boolean onOptionsItemSelected(MenuItem item) { | ||
- | int id = item.getItemId(); | ||
- | if (id == R.id.action_settings) { | ||
- | return true; | ||
- | } | ||
- | return super.onOptionsItemSelected(item); | ||
} | } | ||
} | } | ||
Line 348: | Line 339: | ||
<code java> | <code java> | ||
- | public class PracticalTest01MainActivity extends Activity { | + | public class PracticalTest01MainActivity extends AppCompatActivity { |
private ButtonClickListener buttonClickListener = new ButtonClickListener(); | private ButtonClickListener buttonClickListener = new ButtonClickListener(); | ||
Line 354: | Line 345: | ||
@Override | @Override | ||
public void onClick(View view) { | public void onClick(View view) { | ||
+ | int leftNumberOfClicks = Integer.valueOf(leftEditText.getText().toString()); | ||
+ | int rightNumberOfClicks = Integer.valueOf(rightEditText.getText().toString()); | ||
+ | |||
switch(view.getId()) { | switch(view.getId()) { | ||
- | case R.id.left_button: | + | case R.id.press_me_button: |
- | int leftNumberOfClicks = Integer.parseInt(leftEditText.getText().toString()); | + | |
leftNumberOfClicks++; | leftNumberOfClicks++; | ||
leftEditText.setText(String.valueOf(leftNumberOfClicks)); | leftEditText.setText(String.valueOf(leftNumberOfClicks)); | ||
break; | break; | ||
- | case R.id.right_button: | + | case R.id.press_me_too_button: |
- | int rightNumberOfClicks = Integer.parseInt(rightEditText.getText().toString()); | + | |
rightNumberOfClicks++; | rightNumberOfClicks++; | ||
rightEditText.setText(String.valueOf(rightNumberOfClicks)); | rightEditText.setText(String.valueOf(rightNumberOfClicks)); | ||
Line 375: | Line 367: | ||
// ... | // ... | ||
- | leftButton.setOnClickListener(buttonClickListener); | + | pressMeButton.setOnClickListener(buttonClickListener); |
- | rightButton.setOnClickListener(buttonClickListener); | + | pressMeTooButton.setOnClickListener(buttonClickListener); |
} | } | ||
| | ||
Line 429: | Line 421: | ||
if (savedInstanceState != null) { | if (savedInstanceState != null) { | ||
- | if (savedInstanceState.containsKey("leftCount")) { | + | if (savedInstanceState.containsKey(Constants.LEFT_COUNT)) { |
- | leftEditText.setText(savedInstanceState.getString("leftCount")); | + | leftEditText.setText(savedInstanceState.getString(Constants.LEFT_COUNT)); |
} else { | } else { | ||
leftEditText.setText(String.valueOf(0)); | leftEditText.setText(String.valueOf(0)); | ||
} | } | ||
- | if (savedInstanceState.containsKey("rightCount")) { | + | if (savedInstanceState.containsKey(Constants.RIGHT_COUNT)) { |
- | rightEditText.setText(savedInstanceState.getString("rightCount")); | + | rightEditText.setText(savedInstanceState.getString(Constants.RIGHT_COUNT)); |
} else { | } else { | ||
rightEditText.setText(String.valueOf(0)); | rightEditText.setText(String.valueOf(0)); | ||
Line 447: | Line 439: | ||
@Override | @Override | ||
protected void onSaveInstanceState(Bundle savedInstanceState) { | protected void onSaveInstanceState(Bundle savedInstanceState) { | ||
- | savedInstanceState.putString("leftCount", leftEditText.getText().toString()); | + | savedInstanceState.putString(Constants.LEFT_COUNT, leftEditText.getText().toString()); |
- | savedInstanceState.putString("rightCount", rightEditText.getText().toString()); | + | savedInstanceState.putString(Constants.RIGHT_COUNT, rightEditText.getText().toString()); |
} | } | ||
| | ||
@Override | @Override | ||
protected void onRestoreInstanceState(Bundle savedInstanceState) { | protected void onRestoreInstanceState(Bundle savedInstanceState) { | ||
- | if (savedInstanceState.containsKey("leftCount")) { | + | if (savedInstanceState.containsKey(Constants.LEFT_COUNT)) { |
- | leftEditText.setText(savedInstanceState.getString("leftCount")); | + | leftEditText.setText(savedInstanceState.getString(Constants.LEFT_COUNT)); |
} else { | } else { | ||
leftEditText.setText(String.valueOf(0)); | leftEditText.setText(String.valueOf(0)); | ||
} | } | ||
- | if (savedInstanceState.containsKey("rightCount")) { | + | if (savedInstanceState.containsKey(Constants.RIGHT_COUNT)) { |
- | rightEditText.setText(savedInstanceState.getString("rightCount")); | + | rightEditText.setText(savedInstanceState.getString(Constants.RIGHT_COUNT)); |
} else { | } else { | ||
rightEditText.setText(String.valueOf(0)); | rightEditText.setText(String.valueOf(0)); | ||
Line 499: | Line 491: | ||
<manifest ... > | <manifest ... > | ||
<application ... > | <application ... > | ||
- | <activity | + | <activity android:name=".view.PracticalTest01SecondaryActivity"> |
- | android:name=".PracticalTest01SecondaryActivity" | + | |
- | android:label="@string/title_activity_practical_test01_secondary" > | + | |
<intent-filter> | <intent-filter> | ||
- | <action android:name="ro.pub.cs.systems.eim.intent.action.PracticalTest01SecondaryActivity" /> | + | <action android:name="ro.pub.cs.systems.eim.practicaltest01.intent.action.PracticalTest01SecondaryActivity" /> |
<category android:name="android.intent.category.DEFAULT" /> | <category android:name="android.intent.category.DEFAULT" /> | ||
</intent-filter> | </intent-filter> | ||
Line 560: | Line 550: | ||
<file java PracticalTest01SecondaryActivity.java> | <file java PracticalTest01SecondaryActivity.java> | ||
- | package ro.pub.cs.systems.eim.practicaltest01; | + | package ro.pub.cs.systems.eim.practicaltest01.view; |
- | + | ||
- | import android.app.Activity; | + | |
import android.content.Intent; | import android.content.Intent; | ||
+ | import android.support.v7.app.AppCompatActivity; | ||
import android.os.Bundle; | import android.os.Bundle; | ||
- | import android.view.Menu; | ||
- | import android.view.MenuItem; | ||
import android.view.View; | import android.view.View; | ||
import android.widget.Button; | import android.widget.Button; | ||
import android.widget.TextView; | import android.widget.TextView; | ||
- | + | ||
- | public class PracticalTest01SecondaryActivity extends Activity { | + | import ro.pub.cs.systems.eim.practicaltest01.R; |
- | + | import ro.pub.cs.systems.eim.practicaltest01.general.Constants; | |
- | private TextView numberOfClicksTextView = null; | + | |
- | private Button okButton = null; | + | public class PracticalTest01SecondaryActivity extends AppCompatActivity { |
- | private Button cancelButton = null; | + | |
- | + | private TextView numberOfClicksTextView; | |
+ | private Button okButton, cancelButton; | ||
private ButtonClickListener buttonClickListener = new ButtonClickListener(); | private ButtonClickListener buttonClickListener = new ButtonClickListener(); | ||
private class ButtonClickListener implements View.OnClickListener { | private class ButtonClickListener implements View.OnClickListener { | ||
@Override | @Override | ||
public void onClick(View view) { | public void onClick(View view) { | ||
- | switch(view.getId()) { | + | switch (view.getId()) { |
case R.id.ok_button: | case R.id.ok_button: | ||
setResult(RESULT_OK, null); | setResult(RESULT_OK, null); | ||
Line 590: | Line 580: | ||
} | } | ||
finish(); | finish(); | ||
- | } | + | } |
} | } | ||
- | | + | |
@Override | @Override | ||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||
setContentView(R.layout.activity_practical_test01_secondary); | setContentView(R.layout.activity_practical_test01_secondary); | ||
- | | + | |
numberOfClicksTextView = (TextView)findViewById(R.id.number_of_clicks_text_view); | numberOfClicksTextView = (TextView)findViewById(R.id.number_of_clicks_text_view); | ||
Intent intent = getIntent(); | Intent intent = getIntent(); | ||
- | if (intent != null && intent.getExtras().containsKey("numberOfClicks")) { | + | if (intent != null && intent.getExtras().containsKey(Constants.NUMBER_OF_CLICKS)) { |
- | int numberOfClicks = intent.getIntExtra("numberOfClicks", -1); | + | int numberOfClicks = intent.getIntExtra(Constants.NUMBER_OF_CLICKS, -1); |
numberOfClicksTextView.setText(String.valueOf(numberOfClicks)); | numberOfClicksTextView.setText(String.valueOf(numberOfClicks)); | ||
} | } | ||
- | | + | |
okButton = (Button)findViewById(R.id.ok_button); | okButton = (Button)findViewById(R.id.ok_button); | ||
okButton.setOnClickListener(buttonClickListener); | okButton.setOnClickListener(buttonClickListener); | ||
cancelButton = (Button)findViewById(R.id.cancel_button); | cancelButton = (Button)findViewById(R.id.cancel_button); | ||
cancelButton.setOnClickListener(buttonClickListener); | cancelButton.setOnClickListener(buttonClickListener); | ||
- | } | ||
- | |||
- | @Override | ||
- | public boolean onCreateOptionsMenu(Menu menu) { | ||
- | getMenuInflater().inflate(R.menu.practical_test01_secondary, menu); | ||
- | return true; | ||
- | } | ||
- | |||
- | @Override | ||
- | public boolean onOptionsItemSelected(MenuItem item) { | ||
- | int id = item.getItemId(); | ||
- | if (id == R.id.action_settings) { | ||
- | return true; | ||
- | } | ||
- | return super.onOptionsItemSelected(item); | ||
} | } | ||
} | } | ||
Line 667: | Line 642: | ||
<code java> | <code java> | ||
- | public class PracticalTest01MainActivity extends Activity { | + | public class PracticalTest01MainActivity extends AppCompatActivity { |
- | private final static int SECONDARY_ACTIVITY_REQUEST_CODE = 1; | + | private Button navigateToSecondaryActivityButton; |
- | + | ||
- | private Button navigateToSecondaryActivityButton = null; | + | |
| | ||
private ButtonClickListener buttonClickListener = new ButtonClickListener(); | private ButtonClickListener buttonClickListener = new ButtonClickListener(); | ||
- | private class ButtonClickListener implements Button.OnClickListener { | + | private class ButtonClickListener implements View.OnClickListener { |
@Override | @Override | ||
Line 681: | Line 654: | ||
case R.id.navigate_to_secondary_activity_button: | case R.id.navigate_to_secondary_activity_button: | ||
Intent intent = new Intent(getApplicationContext(), PracticalTest01SecondaryActivity.class); | Intent intent = new Intent(getApplicationContext(), PracticalTest01SecondaryActivity.class); | ||
- | int numberOfClicks = Integer.parseInt(leftEditText.getText().toString()) + | + | int numberOfClicks = Integer.parseInt(leftEditText.getText().toString()) + |
Integer.parseInt(rightEditText.getText().toString()); | Integer.parseInt(rightEditText.getText().toString()); | ||
- | intent.putExtra("numberOfClicks", numberOfClicks); | + | intent.putExtra(Constants.NUMBER_OF_CLICKS, numberOfClicks); |
- | startActivityForResult(intent, SECONDARY_ACTIVITY_REQUEST_CODE); | + | startActivityForResult(intent, Constants.SECONDARY_ACTIVITY_REQUEST_CODE); |
break; | break; | ||
// ... | // ... | ||
Line 703: | Line 676: | ||
@Override | @Override | ||
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { | protected void onActivityResult(int requestCode, int resultCode, Intent intent) { | ||
- | if (requestCode == SECONDARY_ACTIVITY_REQUEST_CODE) { | + | if (requestCode == Constants.SECONDARY_ACTIVITY_REQUEST_CODE) { |
Toast.makeText(this, "The activity returned with result " + resultCode, Toast.LENGTH_LONG).show(); | Toast.makeText(this, "The activity returned with result " + resultCode, Toast.LENGTH_LONG).show(); | ||
} | } | ||
Line 725: | Line 698: | ||
<application ...> | <application ...> | ||
<!-- other components --> | <!-- other components --> | ||
- | <service | + | <service |
- | android:name="ro.pub.cs.systems.eim.PracticalTest01Service" | + | android:name=".service.PracticalTest01Service" |
android:enabled="true" | android:enabled="true" | ||
android:exported="false" /> | android:exported="false" /> | ||
Line 743: | Line 716: | ||
import android.content.Intent; | import android.content.Intent; | ||
import android.os.IBinder; | import android.os.IBinder; | ||
+ | |||
+ | import ro.pub.cs.systems.eim.practicaltest01.general.Constants; | ||
public class PracticalTest01Service extends Service { | public class PracticalTest01Service extends Service { | ||
Line 750: | Line 725: | ||
@Override | @Override | ||
public int onStartCommand(Intent intent, int flags, int startId) { | public int onStartCommand(Intent intent, int flags, int startId) { | ||
- | int firstNumber = intent.getIntExtra("firstNumber", -1); | + | int firstNumber = intent.getIntExtra(Constants.FIRST_NUMBER, -1); |
- | int secondNumber = intent.getIntExtra("secondNumber", -1); | + | int secondNumber = intent.getIntExtra(Constants.SECOND_NUMBER, -1); |
processingThread = new ProcessingThread(this, firstNumber, secondNumber); | processingThread = new ProcessingThread(this, firstNumber, secondNumber); | ||
processingThread.start(); | processingThread.start(); | ||
Line 779: | Line 754: | ||
import android.content.Intent; | import android.content.Intent; | ||
import android.util.Log; | import android.util.Log; | ||
+ | |||
+ | import ro.pub.cs.systems.eim.practicaltest01.general.Constants; | ||
public class ProcessingThread extends Thread { | public class ProcessingThread extends Thread { | ||
Line 799: | Line 776: | ||
@Override | @Override | ||
public void run() { | public void run() { | ||
- | Log.d("[ProcessingThread]", "Thread has started!"); | + | Log.d(Constants.PROCESSING_THREAD_TAG, "Thread has started! PID: " + Process.myPid() + " TID: " + Process.myTid()); |
while (isRunning) { | while (isRunning) { | ||
sendMessage(); | sendMessage(); | ||
sleep(); | sleep(); | ||
} | } | ||
- | Log.d("[ProcessingThread]", "Thread has stopped!"); | + | Log.d(Constants.PROCESSING_THREAD_TAG, "Thread has stopped!"); |
} | } | ||
| | ||
Line 810: | Line 787: | ||
Intent intent = new Intent(); | Intent intent = new Intent(); | ||
intent.setAction(Constants.actionTypes[random.nextInt(Constants.actionTypes.length)]); | intent.setAction(Constants.actionTypes[random.nextInt(Constants.actionTypes.length)]); | ||
- | intent.putExtra("message", new Date(System.currentTimeMillis()) + " " + arithmeticMean + " " + geometricMean); | + | intent.putExtra(Constants.BROADCAST_RECEIVER_EXTRA, |
+ | new Date(System.currentTimeMillis()) + " " + arithmeticMean + " " + geometricMean); | ||
context.sendBroadcast(intent); | context.sendBroadcast(intent); | ||
} | } | ||
Line 855: | Line 833: | ||
&& serviceStatus == Constants.SERVICE_STOPPED) { | && serviceStatus == Constants.SERVICE_STOPPED) { | ||
Intent intent = new Intent(getApplicationContext(), PracticalTest01Service.class); | Intent intent = new Intent(getApplicationContext(), PracticalTest01Service.class); | ||
- | intent.putExtra("firstNumber", leftNumberOfClicks); | + | intent.putExtra(Constants.FIRST_NUMBER, leftNumberOfClicks); |
- | intent.putExtra("secondNumber", rightNumberOfClicks); | + | intent.putExtra(Constants.SECOND_NUMBER, rightNumberOfClicks); |
getApplicationContext().startService(intent); | getApplicationContext().startService(intent); | ||
serviceStatus = Constants.SERVICE_STARTED; | serviceStatus = Constants.SERVICE_STARTED; | ||
Line 886: | Line 864: | ||
@Override | @Override | ||
public void onReceive(Context context, Intent intent) { | public void onReceive(Context context, Intent intent) { | ||
- | Log.d("[Message]", intent.getStringExtra("message")); | + | Log.d(Constants.BROADCAST_RECEIVER_TAG, intent.getStringExtra(Constants.BROADCAST_RECEIVER_EXTRA)); |
} | } | ||
} | } |