/*
IRKitDeviceListActivity.java
Copyright (c) 2015 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.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MenuItem;
import org.deviceconnect.android.deviceplugin.irkit.IRKitApplication;
import org.deviceconnect.android.deviceplugin.irkit.R;
import org.deviceconnect.android.deviceplugin.irkit.data.VirtualProfileData;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitRegisterIRFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitVirtualDeviceFragment;
import org.deviceconnect.android.deviceplugin.irkit.settings.fragment.IRKitVirtualProfileListFragment;
/**
* Device Connect Manager device plug-in list Activity.
*
* @author NTT DOCOMO, INC.
*/
public class IRKitVirtualDeviceListActivity extends Activity
implements FragmentManager.OnBackStackChangedListener {
/**
* エクストラ: 対象のサービスID.
*/
public static final String EXTRA_SERVICE_ID = "serviceId";
/**
* Virtual Device 管理ページ.
*/
public static final int MANAGE_VIRTUAL_DEVICE_PAGE = 0;
/**
* Virtual Profile 管理ページ.
*/
public static final int MANAGE_VIRTUAL_PROFILE_PAGE = 1;
/**
* Ir 登録ページ.
*/
public static final int REGISTER_IR_PAGE = 2;
/**
* 今表示されているページ番号
*/
private int currentPage = MANAGE_VIRTUAL_DEVICE_PAGE;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (null == savedInstanceState) {
String serviceId = getIntent().getStringExtra(EXTRA_SERVICE_ID);
startApp(currentPage, serviceId);
setTitleForPage(currentPage);
getFragmentManager().addOnBackStackChangedListener(this);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
getFragmentManager().removeOnBackStackChangedListener(this);
getIRKitApplication().removeAllListViewPostion();
}
@Override
public void onBackStackChanged() {
setTitleForPage(currentPage);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (currentPage) {
case REGISTER_IR_PAGE:
case MANAGE_VIRTUAL_PROFILE_PAGE:
FragmentManager fm = getFragmentManager();
fm.popBackStack();
currentPage--;
break;
default:
finish();
}
return true;
}
@Override
public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public boolean dispatchKeyEvent(final KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
FragmentManager fm = getFragmentManager();
int cnt = fm.getBackStackEntryCount();
if (cnt <= 1) {
finish();
return false;
} else {
currentPage--;
}
break;
default:
break;
}
}
return super.dispatchKeyEvent(event);
}
private void setTitleForPage(final int pageId) {
int resId;
switch (pageId) {
case MANAGE_VIRTUAL_DEVICE_PAGE:
resId = R.string.virtual_device_list;
break;
case MANAGE_VIRTUAL_PROFILE_PAGE:
resId = R.string.ir_registration;
break;
case REGISTER_IR_PAGE:
resId = R.string.ir_registration;
break;
default:
return;
}
getActionBar().setTitle(resId);
}
/**
* ページを遷移する.
* @param pageId pageId
* @param serviceId サービスID
*/
public void startApp(final int pageId, final String serviceId) {
currentPage = pageId;
setTitle(R.string.activity_devicelist_title);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
if (pageId == MANAGE_VIRTUAL_PROFILE_PAGE) {
IRKitVirtualProfileListFragment f = new IRKitVirtualProfileListFragment();
f.setServiceId(serviceId);
moveFragment(f);
} else if (pageId == MANAGE_VIRTUAL_DEVICE_PAGE) {
IRKitVirtualDeviceFragment f = new IRKitVirtualDeviceFragment();
f.setServiceId(serviceId);
moveFragment(f);
}
}
/**
* IRを登録するページを開く.
* @param virtualProfile Virtual Profile
*/
public void startRegisterPageApp(final VirtualProfileData virtualProfile) {
currentPage = REGISTER_IR_PAGE;
setTitle(R.string.activity_devicelist_title);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
IRKitRegisterIRFragment f = new IRKitRegisterIRFragment();
f.setProfile(virtualProfile);
moveFragment(f);
}
/**
* Fragment の遷移.
* @param f Fragment
*/
private void moveFragment(final Fragment f) {
FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
t.setTransition(FragmentTransaction.TRANSIT_NONE);
t.replace(android.R.id.content, f);
t.addToBackStack(null);
t.commit();
}
/**
* IRKitApplicationを返す.
* @return IRKitApplication
*/
public IRKitApplication getIRKitApplication() {
return (IRKitApplication) getApplication();
}
}