/* Copyright (c) 2009 Matthias Käppler
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.droidfu.activities;
import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.ListAdapter;
import com.github.droidfu.DroidFuApplication;
import com.github.droidfu.adapters.ListAdapterWithProgress;
import com.github.droidfu.dialogs.DialogClickListener;
public class BetterListActivity extends ListActivity implements BetterActivity {
private static final String IS_BUSY_EXTRA = "is_busy";
private boolean wasCreated, wasInterrupted;
private int progressDialogTitleId;
private int progressDialogMsgId;
private Intent currentIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.wasCreated = true;
this.currentIntent = getIntent();
((DroidFuApplication) getApplication()).setActiveContext(getClass().getCanonicalName(),
this);
}
@Override
protected void onDestroy() {
super.onDestroy();
// ((DroidFuApplication)
// getApplication()).resetActiveContext(getClass().getCanonicalName());
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
ListAdapter adapter = getListAdapter();
if (adapter instanceof ListAdapterWithProgress<?>) {
boolean isLoading = ((ListAdapterWithProgress<?>) adapter).isLoadingData();
outState.putBoolean(IS_BUSY_EXTRA, isLoading);
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
ListAdapter adapter = getListAdapter();
if (adapter instanceof ListAdapterWithProgress<?>) {
boolean isLoading = savedInstanceState.getBoolean(IS_BUSY_EXTRA);
((ListAdapterWithProgress<?>) adapter).setIsLoadingData(isLoading);
}
wasInterrupted = true;
}
@Override
protected void onPause() {
super.onPause();
wasCreated = wasInterrupted = false;
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
this.currentIntent = intent;
}
@Override
protected Dialog onCreateDialog(int id) {
return BetterActivityHelper.createProgressDialog(this, progressDialogTitleId,
progressDialogMsgId);
}
public void setProgressDialogTitleId(int progressDialogTitleId) {
this.progressDialogTitleId = progressDialogTitleId;
}
public void setProgressDialogMsgId(int progressDialogMsgId) {
this.progressDialogMsgId = progressDialogMsgId;
}
public int getWindowFeatures() {
return BetterActivityHelper.getWindowFeatures(this);
}
public boolean isRestoring() {
return wasInterrupted;
}
public boolean isResuming() {
return !wasCreated;
}
public boolean isLaunching() {
return !wasInterrupted && wasCreated;
}
public boolean isApplicationBroughtToBackground() {
return BetterActivityHelper.isApplicationBroughtToBackground(this);
}
public Intent getCurrentIntent() {
return currentIntent;
}
public boolean isLandscapeMode() {
return getWindowManager().getDefaultDisplay().getOrientation() == 1;
}
public boolean isPortraitMode() {
return !isLandscapeMode();
}
public AlertDialog newYesNoDialog(int titleResourceId, int messageResourceId,
OnClickListener listener) {
return BetterActivityHelper.newYesNoDialog(this, getString(titleResourceId),
getString(messageResourceId), android.R.drawable.ic_dialog_info, listener);
}
public AlertDialog newInfoDialog(int titleResourceId, int messageResourceId) {
return BetterActivityHelper.newMessageDialog(this, getString(titleResourceId),
getString(messageResourceId), android.R.drawable.ic_dialog_info);
}
public AlertDialog newAlertDialog(int titleResourceId, int messageResourceId) {
return BetterActivityHelper.newMessageDialog(this, getString(titleResourceId),
getString(messageResourceId), android.R.drawable.ic_dialog_alert);
}
public AlertDialog newErrorHandlerDialog(int titleResourceId, Exception error) {
return BetterActivityHelper.newErrorHandlerDialog(this, getString(titleResourceId), error);
}
public AlertDialog newErrorHandlerDialog(Exception error) {
return newErrorHandlerDialog(getResources().getIdentifier(
BetterActivityHelper.ERROR_DIALOG_TITLE_RESOURCE, "string", getPackageName()), error);
}
public <T> Dialog newListDialog(String title, List<T> elements,
DialogClickListener<T> listener, boolean closeOnSelect) {
return BetterActivityHelper.newListDialog(this, title, elements, listener, closeOnSelect);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
BetterActivityHelper.handleApplicationClosing(this, keyCode);
return super.onKeyDown(keyCode, event);
}
}