1 package net.osdn.gokigen.pkremote;
3 import android.Manifest;
4 import android.content.SharedPreferences;
5 import android.content.pm.PackageManager;
6 import android.graphics.Color;
7 import android.graphics.Typeface;
8 import android.os.Bundle;
10 import androidx.annotation.NonNull;
12 import com.google.android.material.bottomnavigation.BottomNavigationView;
14 import androidx.annotation.Nullable;
15 import androidx.appcompat.app.ActionBar;
16 import androidx.appcompat.app.AppCompatActivity;
17 import androidx.core.app.ActivityCompat;
18 import androidx.core.content.ContextCompat;
19 import androidx.preference.PreferenceManager;
21 import android.os.Vibrator;
22 import android.util.Log;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.view.WindowManager;
26 import android.widget.AdapterView;
27 import android.widget.ArrayAdapter;
28 import android.widget.ImageButton;
29 import android.widget.Spinner;
30 import android.widget.TextView;
32 import net.osdn.gokigen.pkremote.camera.CameraInterfaceProvider;
33 import net.osdn.gokigen.pkremote.camera.interfaces.IInterfaceProvider;
34 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraConnection;
35 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
36 import net.osdn.gokigen.pkremote.scene.CameraSceneUpdater;
42 public class MainActivity extends AppCompatActivity implements View.OnClickListener, IInformationReceiver, ICardSlotSelector, AdapterView.OnItemSelectedListener
44 private final String TAG = toString();
45 private IInterfaceProvider interfaceProvider = null;
46 private CameraSceneUpdater scenceUpdater = null;
48 private ImageButton mImageConnectButton = null;
49 private ImageButton mReloadButton = null;
50 private Spinner mCardSlotSelection = null;
51 private ICardSlotSelectionReceiver slotSelectionReceiver = null;
52 //private TextView mTextMessage = null;
54 private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
55 = new BottomNavigationView.OnNavigationItemSelectedListener() {
58 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
59 switch (item.getItemId()) {
60 case R.id.navigation_photo_library:
61 scenceUpdater.changeScenceToImageList();
63 case R.id.navigation_calendar:
64 scenceUpdater.changeSceneToCalendar();
66 case R.id.navigation_auto_transfer:
67 scenceUpdater.changeSceneToAutoTransfer();
69 case R.id.navigation_settings:
70 scenceUpdater.changeSceneToConfiguration();
82 public void onBackPressed()
84 //Log.v(TAG, "onBackPressed()");
85 super.onBackPressed();
86 runOnUiThread(new Runnable() {
90 if (scenceUpdater != null)
92 scenceUpdater.updateBottomNavigationMenu();
103 protected void onCreate(Bundle savedInstanceState)
105 super.onCreate(savedInstanceState);
106 setContentView(R.layout.activity_main);
109 ActionBar bar = getSupportActionBar();
120 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
122 //mTextMessage = findViewById(R.id.message);
123 mImageConnectButton = findViewById(R.id.button_wifi_connect);
124 mReloadButton = findViewById(R.id.button_reload);
125 mCardSlotSelection = findViewById(R.id.card_slot_selection);
127 BottomNavigationView navigation = findViewById(R.id.navigation);
128 navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
131 final int REQUEST_NEED_PERMISSIONS = 1010;
133 if ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ||
134 (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ||
135 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_MEDIA_LOCATION) != PackageManager.PERMISSION_GRANTED) ||
136 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) ||
137 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) ||
138 (ContextCompat.checkSelfPermission(this, Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) ||
139 (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED)) {
140 ActivityCompat.requestPermissions(this,
142 Manifest.permission.WRITE_EXTERNAL_STORAGE,
143 Manifest.permission.READ_EXTERNAL_STORAGE,
144 Manifest.permission.ACCESS_MEDIA_LOCATION,
145 Manifest.permission.ACCESS_NETWORK_STATE,
146 Manifest.permission.ACCESS_WIFI_STATE,
147 Manifest.permission.VIBRATE,
148 Manifest.permission.INTERNET,
150 REQUEST_NEED_PERMISSIONS);
161 public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
163 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
172 protected void onPause()
177 ICameraConnection connection = interfaceProvider.getCameraConnection();
178 if (connection != null)
180 connection.stopWatchWifiStatus(this);
190 * クラスの初期化 (instantiate)
192 private void initializeClass()
196 scenceUpdater = CameraSceneUpdater.newInstance(this);
197 interfaceProvider = CameraInterfaceProvider.newInstance(this, scenceUpdater, this, this);
198 scenceUpdater.changeFirstFragment(interfaceProvider);
209 private void prepareClass()
213 mImageConnectButton.setOnClickListener(this);
214 mReloadButton.setOnClickListener(this);
215 setupCardSlotSelection(interfaceProvider.getCammeraConnectionMethod() == ICameraConnection.CameraConnectionMethod.PANASONIC);
223 private void setupCardSlotSelection(boolean isEnabled)
227 if (mCardSlotSelection == null)
229 mCardSlotSelection = findViewById(R.id.card_slot_selection);
233 // 接続モードが Panasonic の時だけ、SD Card 選択を出せるようにする
234 mCardSlotSelection.setVisibility(View.VISIBLE);
235 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sd_card_slot, android.R.layout.simple_spinner_item);
236 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
237 mCardSlotSelection.setAdapter(adapter);
238 mCardSlotSelection.setOnItemSelectedListener(this);
242 mCardSlotSelection.setVisibility(View.GONE);
254 * 初期化終了時の処理 (カメラへの自動接続)
256 private void onReadyClass()
261 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
262 boolean isAutoConnectCamera = preferences.getBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
263 Log.v(TAG, "isAutoConnectCamera() : " + isAutoConnectCamera);
266 if (isAutoConnectCamera)
269 scenceUpdater.changeCameraConnection();
279 public void onClick(View v)
286 case R.id.button_wifi_connect:
288 scenceUpdater.changeCameraConnection();
292 case R.id.button_reload:
294 scenceUpdater.reloadRemoteImageContents();
312 private void vibrate()
315 Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
316 if (vibrator != null)
318 vibrator.vibrate(50);
329 public void updateMessage(final String message, final boolean isBold, final boolean isColor, final int color)
332 final TextView messageArea = findViewById(R.id.message);
333 runOnUiThread(new Runnable() {
337 if ((messageArea != null) && (message != null))
339 messageArea.setText(message);
342 messageArea.setTypeface(Typeface.DEFAULT_BOLD);
346 messageArea.setTextColor(color);
350 messageArea.setTextColor(Color.DKGRAY);
352 messageArea.invalidate();
369 public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
373 String item = (String) parent.getItemAtPosition(position);
374 Log.v(TAG, " onItemSelected : " + item);
375 if ((slotSelectionReceiver != null)&&(item != null))
377 slotSelectionReceiver.slotSelected(item);
380 // scenceUpdater.reloadRemoteImageContents();
389 public void onNothingSelected(AdapterView<?> parent)
395 public void setupSlotSelector(final boolean isEnable, @Nullable ICardSlotSelectionReceiver slotSelectionReceiver)
399 Log.v(TAG, " ------- setupSlotSelector " + isEnable);
400 this.slotSelectionReceiver = slotSelectionReceiver;
401 runOnUiThread(new Runnable() {
405 setupCardSlotSelection(isEnable);
416 public void selectSlot(@NonNull String slotId)
420 Log.v(TAG, " selectSlot : " + slotId);
430 public void changedCardSlot(@NonNull String slotId)
434 Log.v(TAG, " changedCardSlot : " + slotId);
435 scenceUpdater.reloadRemoteImageContents();