/*
IRKitSettingActivity.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.irkit.settings.activity;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import org.deviceconnect.android.deviceplugin.irkit.BuildConfig;
import org.deviceconnect.android.deviceplugin.irkit.IRKitManager;
import org.deviceconnect.android.deviceplugin.irkit.IRKitManager.WiFiSecurityType;
import org.deviceconnect.android.deviceplugin.irkit.R;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitAccessPointSettingFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitBaseFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitEndingFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitPowerOnFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitWiFiSelectionFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.widget.HoldableViewPager;
import java.util.List;
/**
* 設定用Activity.
* @author NTT DOCOMO, INC.
*/
public class IRKitSettingActivity extends IRKitAbstractSettingActivity {
/** ページ数. */
private static final int PAGE_COUNT = 4;
/**
* SharedPreference 名前.
*/
public static final String SP_NAME = "irkit";
/**
* SharedPreference キー clientkey.
*/
public static final String SP_KEY_CLIENT_KEY = "client_key";
/**
* クライアントキー.
*/
private String mClientKey;
/**
* サービスID.
*/
private String mServiceId;
/**
* デバイスキー.
*/
private String mDeviceKey;
/**
* 前のページ.
*/
private int mPrePage;
/**
* SSID.
*/
private String mSSID;
/**
* パスワード.
*/
private String mPassword;
/**
* セキュリティタイプ.
*/
private WiFiSecurityType mSecType;
/**
* ページのクラス一覧.
*/
@SuppressWarnings({ "rawtypes" })
private static final Class[] PAGES = {
IRKitPowerOnFragment.class,
IRKitAccessPointSettingFragment.class,
IRKitWiFiSelectionFragment.class,
IRKitEndingFragment.class,
};
private static final int[] PAGE_TITLES = {
R.string.page01,
R.string.page02,
R.string.page03,
R.string.page04
};
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (null == savedInstanceState) {
mPrePage = 0;
mSecType = WiFiSecurityType.WPA2;
getViewPager().setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(final int position) {
FragmentManager fm = getSupportFragmentManager();
List<Fragment> list = fm.getFragments();
if (list == null) {
return;
}
Fragment next = list.get(position);
Fragment pre = list.get(mPrePage);
if (next != null && next instanceof IRKitBaseFragment) {
((IRKitBaseFragment) next).onAppear();
}
if (pre != null && pre instanceof IRKitBaseFragment) {
((IRKitBaseFragment) pre).onDisapper();
}
mPrePage = position;
}
@Override
public void onPageScrolled(final int position, final float positionOffset,
final int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(final int state) {
}
});
IRKitManager.INSTANCE.init(this);
final SharedPreferences sp = getSharedPreferences(SP_NAME, MODE_PRIVATE);
mClientKey = sp.getString(SP_KEY_CLIENT_KEY, null);
}
}
@Override
public Fragment createPage(final int position) {
Fragment page;
try {
page = (Fragment) PAGES[position].newInstance();
} catch (InstantiationException e) {
if (BuildConfig.DEBUG) {
e.printStackTrace();
}
page = null;
} catch (IllegalAccessException e) {
if (BuildConfig.DEBUG) {
e.printStackTrace();
}
page = null;
}
return page;
}
@Override
public int getPageCount() {
return PAGE_COUNT;
}
/**
* クライアントキーを取得する.
*
* @return クライアントキー。無い場合はnullを返す。
*/
public String getClientKey() {
return mClientKey;
}
/**
* クライアントキーを保存する.
*
* @param clientKey クライアントキー
*/
public void saveClientKey(final String clientKey) {
SharedPreferences sp = getSharedPreferences(SP_NAME, MODE_PRIVATE);
sp.edit().putString(SP_KEY_CLIENT_KEY, clientKey).commit();
}
@Override
protected void onResume() {
super.onResume();
FragmentManager fm = getSupportFragmentManager();
List<Fragment> list = fm.getFragments();
if (list == null) {
return;
}
Fragment f = list.get(getViewPager().getCurrentItem());
if (f != null && f instanceof IRKitBaseFragment) {
((IRKitBaseFragment) f).onEnterForeground();
}
}
@Override
protected void onPause() {
super.onPause();
FragmentManager fm = getSupportFragmentManager();
List<Fragment> list = fm.getFragments();
if (list == null) {
return;
}
getViewPager().setEnabled(false);
Fragment f = list.get(getViewPager().getCurrentItem());
if (f != null && f instanceof IRKitBaseFragment) {
((IRKitBaseFragment) f).onEnterBackground();
}
}
@Override
public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
/**
* サービスIDを設定する.
*
* @param serviceId サービスID
*/
public void setServiceId(final String serviceId) {
mServiceId = serviceId;
}
/**
* デバイスキーを設定する.
*
* @param deviceKey デバイスキー
*/
public void setDeviceKey(final String deviceKey) {
mDeviceKey = deviceKey;
}
/**
* サービスIDを取得する.
*
* @return サービスID
*/
public String getServiceId() {
return mServiceId;
}
/**
* デバイスキーを取得する.
*
* @return デバイスキー
*/
public String getDeviceKey() {
return mDeviceKey;
}
/**
* タッチの可不可を設定する.
*
* @param touchEnable 可不可
*/
public void setTouchEnable(final boolean touchEnable) {
((HoldableViewPager) getViewPager()).setScrollable(touchEnable);
}
/**
* SSIDを設定する.
*
* @param ssid SSID
*/
public void setSSID(final String ssid) {
mSSID = ssid;
}
/**
* パスワードを設定する.
*
* @param password パスワード
*/
public void setPassword(final String password) {
mPassword = password;
}
/**
* セキュリティタイプを設定する.
*
* @param type タイプ
*/
public void setSecType(final WiFiSecurityType type) {
mSecType = type;
}
/**
* SSIDを取得する.
*
* @return SSID
*/
public String getSSID() {
return mSSID;
}
/**
* パスワードを取得する.
*
* @return パスワード
*/
public String getPassword() {
return mPassword;
}
/**
* セキュリティタイプを取得する.
*
* @return セキュリティタイプ
*/
public WiFiSecurityType getSecType() {
return mSecType;
}
}