/*
SettingsFragment.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.uiapp.fragment;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.util.Log;
import org.deviceconnect.android.uiapp.DConnectApplication;
import org.deviceconnect.android.uiapp.R;
import org.deviceconnect.android.uiapp.utils.Settings;
import org.deviceconnect.message.DConnectMessage;
import org.deviceconnect.message.DConnectResponseMessage;
import org.deviceconnect.message.DConnectSDK;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* 設定画面フラグメント.
*/
public class SettingsFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener {
private DConnectSDK mDConnectSDK;
private ScheduledExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture mFuture;
private Handler mHandler = new Handler(Looper.getMainLooper());
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
PreferenceScreen versionPreferences = (PreferenceScreen)
getPreferenceScreen().findPreference(
getString(R.string.key_settings_about_appinfo));
try {
versionPreferences.setSummary((getActivity().getPackageManager()
.getPackageInfo(getActivity().getPackageName(), 0).versionName));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
CheckBoxPreference checkBoxSslPreferences = (CheckBoxPreference)
getPreferenceScreen().findPreference(
getString(R.string.key_settings_dconn_ssl));
checkBoxSslPreferences.setOnPreferenceChangeListener(this);
EditTextPreference editHostPreferences = (EditTextPreference)
getPreferenceScreen().findPreference(getString(R.string.key_settings_dconn_host));
editHostPreferences.setOnPreferenceChangeListener(this);
editHostPreferences.setSummary(editHostPreferences.getText());
EditTextPreference editPortPreferences = (EditTextPreference)
getPreferenceScreen().findPreference(getString(R.string.key_settings_dconn_port));
editPortPreferences.setOnPreferenceChangeListener(this);
editPortPreferences.setSummary(editPortPreferences.getText());
ListPreference listPreference = (ListPreference)
getPreferenceScreen().findPreference(getString(R.string.key_settings_dconn_sdk));
listPreference.setSummary(Settings.getInstance().getSDKType());
listPreference.setOnPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
mDConnectSDK = ((DConnectApplication) getActivity().getApplication()).getDConnectSK();
startMonitoring();
}
@Override
public void onPause() {
mDConnectSDK = null;
stopMonitoring();
super.onPause();
}
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
if (getString(R.string.key_settings_dconn_launch).equals(preference.getKey())) {
if (mDConnectSDK == null) {
return false;
}
Log.e("ABC", "startManager aaaaa:");
Boolean result = (Boolean) newValue;
if (result) {
Log.e("ABC", "startManager aaaaa bbb:");
mDConnectSDK.startManager(getActivity());
} else {
Log.e("ABC", "startManager aaaaa ccc:");
mDConnectSDK.stopManager(getActivity());
}
return false;
} else if (getString(R.string.key_settings_dconn_sdk).equals(preference.getKey())) {
if (newValue != null) {
preference.setSummary((CharSequence) newValue);
DConnectApplication app = (DConnectApplication) getActivity().getApplication();
app.initDConnectSDK((String) newValue);
return true;
}
}
return true;
}
@Override
public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, final Preference preference) {
if (getString(R.string.key_settings_about_oss).equals(preference.getKey())) {
// mOssFragment.show(getFragmentManager(), null);
} else if (getString(R.string.key_settings_about_privacypolicy).equals(preference.getKey())) {
Bundle policyArgs = new Bundle();
policyArgs.putInt(Intent.EXTRA_TITLE, R.string.privacy_policy);
policyArgs.putInt(Intent.EXTRA_TEXT, R.raw.privacypolicy);
TextDialogFragment fragment = new TextDialogFragment();
fragment.setArguments(policyArgs);
fragment.show(getFragmentManager(), null);
} else if (getString(R.string.key_settings_about_tos).equals(preference.getKey())) {
Bundle tosArgs = new Bundle();
tosArgs.putInt(Intent.EXTRA_TITLE, R.string.terms_of_service);
tosArgs.putInt(Intent.EXTRA_TEXT, R.raw.termsofservice);
TextDialogFragment fragment = new TextDialogFragment();
fragment.setArguments(tosArgs);
fragment.show(getFragmentManager(), null);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
private void startMonitoring() {
mFuture = mExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
final boolean result = checkManager();
mHandler.post(new Runnable() {
@Override
public void run() {
if (getActivity() != null) {
setManagerLaunch(result);
}
}
});
}
}, 1, 3, TimeUnit.SECONDS);
}
private void stopMonitoring() {
if (mFuture != null) {
mFuture.cancel(true);
mFuture = null;
}
}
private void setManagerLaunch(final boolean flag) {
SwitchPreference sw = (SwitchPreference)
getPreferenceScreen().findPreference(getString(R.string.key_settings_dconn_launch));
sw.setOnPreferenceChangeListener(null);
sw.setChecked(flag);
sw.setOnPreferenceChangeListener(this);
}
private boolean checkManager() {
if (mDConnectSDK == null) {
return false;
}
DConnectResponseMessage response = mDConnectSDK.availability();
return response != null && response.getResult() == DConnectMessage.RESULT_OK;
}
}