This shows you the differences between two versions of the page.
|
eim:colocvii:colocviu01 [2019/03/25 15:29] dragos.niculescu [Rezolvări] |
eim:colocvii:colocviu01 [2020/03/29 20:33] (current) andrei.bolojan |
||
|---|---|---|---|
| Line 7: | Line 7: | ||
| </HTML> | </HTML> | ||
| - | {{url>https://ocw.cs.pub.ro/courses/_media/eim/colocvii/colocviu01/eim2017-tp01-varsim.pdf 90%,800px}} | + | {{url>https://ocw.cs.pub.ro/courses/_media/eim/colocvii/colocviu01/eim-colocviu1-exemplu.pdf 90%,800px}} |
| <HTML> | <HTML> | ||
| Line 13: | Line 13: | ||
| </HTML> | </HTML> | ||
| - | {{ :eim:colocvii:colocviu01:eim2017-tp01-varsim.pdf }} | + | {{ :eim:colocvii:colocviu01:eim-colocviu1-exemplu.pdf }} |
| ===== Observații Generale ===== | ===== Observații Generale ===== | ||
| 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)); |
| } | } | ||
| } | } | ||