package com.xypower.mpapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import androidx.appcompat.app.ActionBar; import com.xypower.mpapp.databinding.ActivityChannelBinding; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import android.widget.AdapterView; public class ChannelActivity extends AppCompatActivity { private ActivityChannelBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityChannelBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); getSupportActionBar().setDisplayHomeAsUpEnabled(true); binding.sensitivity.setOnFocusChangeListener(onFocusChangeListener); binding.exposuretime.setOnFocusChangeListener(onFocusChangeListener); int channel = binding.channels.getSelectedItemPosition(); loadChannelParams(channel); binding.channels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { int channel = i + 1; loadChannelParams(channel); } @Override public void onNothingSelected(AdapterView adapterView) { } }); binding.btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int channel = binding.channels.getSelectedItemPosition() + 1; saveChannelParams(channel); } }); } private View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } }; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // todo: goto back activity from here finish(); return true; default: return super.onOptionsItemSelected(item); } } protected void loadChannelParams(int channel) { binding.btnAutoExplosure.setChecked(true); binding.btnAutoFocus.setChecked(true); binding.btnHdrMode.setChecked(true); binding.exposuretime.setText("0"); binding.sensitivity.setText("0"); String appPath = MicroPhotoService.buildAppDir(getApplicationContext()); InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; try { inputStreamReader = new InputStreamReader(new FileInputStream(new File(appPath + "data/channels/" + String.valueOf(channel) + ".json")), "UTF-8"); bufferedReader = new BufferedReader(inputStreamReader); String line; StringBuilder stringBuilder = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } JSONObject jsonObject = new JSONObject(stringBuilder.toString()); binding.btnAutoExplosure.setChecked(jsonObject.optInt("autoExposure", 1) == 1); binding.btnAutoFocus.setChecked(jsonObject.optInt("autoFocus", 1) == 1); binding.btnHdrMode.setChecked(jsonObject.optInt("hdr", 1) == 1); binding.exposuretime.setText(Integer.toString(jsonObject.optInt("exposureTime", 0))); binding.sensitivity.setText(Integer.toString(jsonObject.optInt("sensibility", 0))); binding.orientations.setSelection(jsonObject.optInt("orientation", 0)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (Exception ex) { } } if (inputStreamReader != null) { try { inputStreamReader.close(); } catch (Exception ex) { } } } } private void saveChannelParams(int channel) { JSONObject jsonObject = null; String appPath = MicroPhotoService.buildAppDir(this.getApplicationContext()); InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; File dataPath = new File(appPath + "data/channels/"); File file = new File(dataPath, String.valueOf(channel) + ".json"); try { StringBuilder stringBuilder = new StringBuilder(); if (file.exists()) { inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF-8"); bufferedReader = new BufferedReader(inputStreamReader); String line; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } jsonObject =stringBuilder.length() > 0 ? (new JSONObject(stringBuilder.toString())) : (new JSONObject()); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (Exception ex) { } } if (inputStreamReader != null) { try { inputStreamReader.close(); } catch (Exception ex) { } } } if (jsonObject == null) { jsonObject = new JSONObject(); } try { jsonObject.put("autoExposure", binding.btnAutoExplosure.isChecked() ? 1 : 0); jsonObject.put("autoFocus", binding.btnAutoFocus.isChecked() ? 1 : 0); jsonObject.put("hdrMode", binding.btnHdrMode.isChecked() ? 1 : 0); jsonObject.put("exposureTime", Integer.parseInt(binding.exposuretime.getText().toString())); jsonObject.put("sensibility", Integer.parseInt(binding.sensitivity.getText().toString())); jsonObject.put("orientation", binding.orientations.getSelectedItemPosition()); } catch (JSONException ex) { } OutputStreamWriter outputStreamWriter = null; try { if (!dataPath.exists()) { dataPath.mkdirs(); } outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); outputStreamWriter.write(jsonObject.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (outputStreamWriter != null) { try { outputStreamWriter.close(); } catch (Exception ex) { } } } } }