/*
SettingActivity.java
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.linking.setting;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import org.deviceconnect.android.deviceplugin.linking.BuildConfig;
import org.deviceconnect.android.deviceplugin.linking.LinkingApplication;
import org.deviceconnect.android.deviceplugin.linking.R;
import org.deviceconnect.android.deviceplugin.linking.linking.LinkingDevice;
import org.deviceconnect.android.deviceplugin.linking.linking.LinkingDeviceManager;
import org.deviceconnect.android.deviceplugin.linking.linking.LinkingUtil;
import org.deviceconnect.android.deviceplugin.linking.setting.fragment.LinkingBeaconListFragment;
import org.deviceconnect.android.deviceplugin.linking.setting.fragment.LinkingDeviceListFragment;
import org.deviceconnect.android.deviceplugin.linking.setting.fragment.dialog.ConfirmationDialogFragment;
/**
* Activity for setting.
*
* @author NTT DOCOMO, INC.
*/
public class SettingActivity extends AppCompatActivity implements ConfirmationDialogFragment.OnDialogEventListener {
public static final String TAG = "Linking-Plugin";
private Fragment[] mFragments = new Fragment[2];
private String[] pageTitle = new String[2];
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linking_setting);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setElevation(0);
}
pageTitle[0] = getString(R.string.activity_setting_tab_paring);
pageTitle[1] = getString(R.string.activity_setting_tab_beacon);
mFragments[0] = LinkingDeviceListFragment.newInstance();
mFragments[1] = LinkingBeaconListFragment.newInstance();
TabLayout tabLayout = (TabLayout) findViewById(R.id.activity_setting_tabs);
ViewPager viewPager = (ViewPager) findViewById(R.id.activity_setting_view_pager);
if (viewPager != null) {
viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));
if (tabLayout != null) {
tabLayout.setupWithViewPager(viewPager);
}
}
checkArguments(getIntent());
if (LinkingUtil.getVersionCode(this) < LinkingUtil.LINKING_APP_VERSION) {
openUpdateDialog();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
checkArguments(intent);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu_linking_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (item.getItemId() == R.id.menu_setting) {
transitionLinkingApp();
} else if (item.getItemId() == R.id.menu_information) {
transitionAppInform();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onPositiveClick(final DialogFragment fragment) {
LinkingUtil.startGooglePlay(this);
}
@Override
public void onNegativeClick(final DialogFragment fragment) {
}
private void checkArguments(final Intent intent) {
if (intent != null) {
String appName = intent.getStringExtra(getPackageName() + LinkingUtil.EXTRA_APP_NAME);
if (BuildConfig.DEBUG) {
Log.i(TAG, "appName=" + appName);
}
int deviceId = intent.getIntExtra(getPackageName() + LinkingUtil.EXTRA_DEVICE_ID, -1);
int deviceUid = intent.getIntExtra(getPackageName() + LinkingUtil.EXTRA_DEVICE_UID, -1);
LinkingDevice device = getLinkingDeviceId(deviceId, deviceUid);
if (device != null) {
transitionDeviceControl(device);
}
}
}
private void transitionLinkingApp() {
Intent intent = new Intent();
intent.setClass(this, LinkingInductionActivity.class);
startActivity(intent);
}
private void transitionAppInform() {
Intent intent = new Intent();
intent.setClass(this, AppInformationActivity.class);
startActivity(intent);
}
private void transitionDeviceControl(final LinkingDevice device) {
if (device.isConnected()) {
Intent intent = new Intent();
intent.putExtra(LinkingDeviceActivity.EXTRA_ADDRESS, device.getBdAddress());
intent.setClass(this, LinkingDeviceActivity.class);
startActivity(intent);
}
}
private LinkingDeviceManager getLinkingDeviceManager() {
LinkingApplication app = (LinkingApplication) getApplication();
return app.getLinkingDeviceManager();
}
private LinkingDevice getLinkingDeviceId(final int deviceId, final int deviceUid) {
LinkingDeviceManager mgr = getLinkingDeviceManager();
return mgr.findDeviceByDeviceId(deviceId, deviceUid);
}
private void openUpdateDialog() {
String title = getString(R.string.activity_setting_update_dialog_title);
String message = getString(R.string.activity_setting_update_dialog_message);
String positive = getString(R.string.activity_setting_update_dialog_positive);
String negative = getString(R.string.activity_setting_update_dialog_negative);
ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(title, message, positive, negative);
dialog.show(getSupportFragmentManager(), "");
}
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(final FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(final int position) {
return mFragments[position];
}
@Override
public int getCount() {
return mFragments.length;
}
@Override
public CharSequence getPageTitle(final int position) {
return pageTitle[position];
}
}
}