/*
* Copyright (C) 2010 Paul Watts (paulcwatts@gmail.com)
*
* 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 org.onebusaway.android.ui;
import org.onebusaway.android.R;
import org.onebusaway.android.app.Application;
import org.onebusaway.android.util.LocationUtils;
import org.onebusaway.android.util.PreferenceUtils;
import org.onebusaway.android.util.UIUtils;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.Window;
abstract class MyTabActivityBase extends AppCompatActivity {
public static final String EXTRA_SHORTCUTMODE = ".ShortcutMode";
public static final String EXTRA_SEARCHCENTER = ".SearchCenter"; //int[]
public static final String RESULT_ROUTE_ID = ".RouteId";
protected boolean mShortcutMode;
protected Location mSearchCenter;
protected String mDefaultTab;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);
UIUtils.setupActionBar(this);
setSupportProgressBarIndeterminateVisibility(false);
final Intent intent = getIntent();
final String action = intent.getAction();
mShortcutMode = Intent.ACTION_CREATE_SHORTCUT.equals(action);
if (!mShortcutMode) {
setTitle(R.string.app_name);
}
mSearchCenter = getSearchCenter(intent);
// Determine what tab we're supposed to show by default
if (savedInstanceState != null) {
mDefaultTab = savedInstanceState.getString("tab");
}
final Uri data = intent.getData();
if (data != null && mDefaultTab == null) {
mDefaultTab = getDefaultTabFromUri(data);
}
}
@Override
public void onDestroy() {
// If there was a tab in the intent, don't save it
if (mDefaultTab == null) {
final ActionBar bar = getSupportActionBar();
final ActionBar.Tab tab = bar.getSelectedTab();
PreferenceUtils.saveString(getLastTabPref(), (String) tab.getTag());
}
super.onDestroy();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
NavHelp.goHome(this, false);
return true;
}
return false;
}
protected void restoreDefaultTab() {
final String def;
if (mDefaultTab != null) {
def = mDefaultTab;
} else {
SharedPreferences settings = Application.getPrefs();
def = settings.getString(getLastTabPref(), null);
}
if (def != null) {
// Find this tab...
final ActionBar bar = getSupportActionBar();
for (int i = 0; i < bar.getTabCount(); ++i) {
ActionBar.Tab tab = bar.getTabAt(i);
if (def.equals(tab.getTag())) {
tab.select();
}
}
}
}
//
// Accessors for tabs
//
boolean isShortcutMode() {
return mShortcutMode;
}
Location getSearchCenter() {
return mSearchCenter;
}
//
// Helpers for constructing/parsing the default tab URL.
//
private static final String TAB_SCHEME = "tab";
public static final Uri getDefaultTabUri(String tab) {
return Uri.fromParts(TAB_SCHEME, tab, null);
}
public static String getDefaultTabFromUri(Uri uri) {
if (TAB_SCHEME.equals(uri.getScheme())) {
return uri.getSchemeSpecificPart();
}
return null;
}
protected abstract String getLastTabPref();
//
// Helper for getting the search center from the intent
//
public static final Intent putSearchCenter(Intent intent, Location pt) {
if (pt != null) {
double[] p = {pt.getLatitude(), pt.getLongitude()};
intent.putExtra(EXTRA_SEARCHCENTER, p);
}
return intent;
}
private static final Location getSearchCenter(Intent intent) {
double[] p = intent.getDoubleArrayExtra(EXTRA_SEARCHCENTER);
if (p != null && p.length == 2) {
return LocationUtils.makeLocation(p[0], p[1]);
}
return null;
}
}