/*
SlackMessageHookSettingActivity.java
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.slackmessagehook.setting;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.KeyEvent;
import android.view.MenuItem;
import org.deviceconnect.android.deviceplugin.slackmessagehook.R;
import org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment.ChannelListFragment;
import org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment.SettingFragment;
import org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment.SettingTokenFragment;
import org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment.ShowMenuFragment;
import org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment.Utils;
import org.deviceconnect.android.deviceplugin.slackmessagehook.slack.SlackManager;
import org.deviceconnect.android.ui.activity.DConnectSettingPageActivity;
import java.io.File;
/**
* 設定用Activity.
*
* @author NTT DOCOMO, INC.
*/
public class SlackMessageHookSettingActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Holo_Light_DarkActionBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final boolean launchAsApp = Intent.ACTION_MAIN.equals(getIntent().getAction());
// CLOSEボタン作成
if (getActionBar() != null && !launchAsApp) {
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
getActionBar().setTitle(R.string.slack_settings);
}
// アクセストークンチェック
boolean needsConnect = Utils.getOnlineStatus(this);
final String token = Utils.getAccessToken(this);
// プログレスダイアログを表示
ProgressDialog dialog = null;
if (needsConnect) {
dialog = Utils.showProgressDialog(this);
}
final ProgressDialog finalDialog = dialog;
SlackManager.INSTANCE.setApiToken(token, needsConnect, new SlackManager.FinishCallback<Void>() {
@Override
public void onFinish(Void aVoid, Exception error) {
if (finalDialog != null) finalDialog.dismiss();
Fragment fragment;
if (token == null || error instanceof SlackManager.SlackAuthException) {
// Token未設定の場合はToken設定画面へ
fragment = new SettingTokenFragment();
if (launchAsApp) {
Utils.transition(new ChannelListFragment(), getFragmentManager(), false);
Utils.transition(fragment, getFragmentManager(), true);
return;
}
} else {
if (launchAsApp || error != null) {
// ラウンチャーから起動の場合はChannelリスト画面へ
fragment = new ChannelListFragment();
} else {
// Managerからの起動の場合は設定画面へ
fragment = new SettingFragment();
}
}
// 画面遷移
Utils.transition(fragment, getFragmentManager(), false);
}
});
}
/** メニューを表示するクラス */
private static final Class[] MenuFragments = {
ChannelListFragment.class,
SettingFragment.class
};
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
final int action = event.getAction();
final int keyCode = event.getKeyCode();
if (action == KeyEvent.ACTION_UP) {
// メニュー表示
if (keyCode == KeyEvent.KEYCODE_MENU) {
for (Class cls: MenuFragments) {
ShowMenuFragment fragment = (ShowMenuFragment) getFragmentManager().findFragmentByTag(cls.getName());
if (fragment != null && fragment.isVisible()) {
fragment.showMenu();
}
}
return true;
}
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
final Context context = SlackMessageHookSettingActivity.this;
switch (item.getItemId()) {
case android.R.id.home:
// 閉じる
finish();
return true;
case R.id.menu_change_token:
// 画面遷移
Utils.transition(new SettingTokenFragment(), getFragmentManager(), true);
return true;
case R.id.menu_setting:
// 画面遷移
Fragment fragment = new SettingFragment();
Utils.transition(fragment, getFragmentManager(), true);
break;
case R.id.menu_clear_cache:
// キャッシュクリア
Utils.showConfirmDialog(context, context.getString(R.string.menu_clear_cache), context.getString(R.string.clear_cache), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
File cacheDir = Utils.getCacheDir(context);
Utils.deleteDir(cacheDir);
}
});
break;
case R.id.menu_open_slack:
// Slackを開く
Uri uri = Uri.parse("https://slack.com/messages");
Intent i = new Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
return true;
}
return super.onOptionsItemSelected(item);
}
}