/* * Copyright 2013 two forty four a.m. LLC <http://www.twofortyfouram.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 it.angelic.soulissclient; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.Html; import android.widget.EditText; import android.widget.TextView; import it.angelic.bundle.BundleScrubber; import it.angelic.bundle.PluginBundleManager; /** * This is the "Edit" activity for a Locale Plug-in. * <p/> * This Activity can be started in one of two states: * <ul> * <li>New plug-in instance: The Activity's Intent will not contain * {@link com.twofortyfouram.locale.Intent#EXTRA_BUNDLE}.</li> * <li>Old plug-in instance: The Activity's Intent will contain * {@link com.twofortyfouram.locale.Intent#EXTRA_BUNDLE} from a previously saved plug-in instance that the * user is editing.</li> * </ul> * * @see com.twofortyfouram.locale.Intent#ACTION_EDIT_SETTING * @see com.twofortyfouram.locale.Intent#EXTRA_BUNDLE */ public final class TaskerEditQueryActivity extends AbstractPluginActivity { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); BundleScrubber.scrub(getIntent()); final Bundle localeBundle = getIntent().getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE); BundleScrubber.scrub(localeBundle); setContentView(R.layout.main_tasker_query_config); TextView longDesc = (TextView) findViewById(R.id.textLongQueryExpl); longDesc.setText(Html.fromHtml(getString(R.string.tasker_query_longexp))); if (null == savedInstanceState) { if (PluginBundleManager.isBundleValid(localeBundle)) { final String message = localeBundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE); ((EditText) findViewById(android.R.id.text1)).setText(message); } } } @Override public void finish() { if (!isCanceled()) { final String message = ((EditText) findViewById(android.R.id.text1)).getText().toString(); if (message.length() > 0) { final Intent resultIntent = new Intent(); /* * This extra is the data to ourselves: either for the Activity or the BroadcastReceiver. Note * that anything placed in this Bundle must be available to Locale's class loader. So storing * String, int, and other standard objects will work just fine. Parcelable objects are not * acceptable, unless they also implement Serializable. Serializable objects must be standard * Android platform objects (A Serializable class private to this plug-in's APK cannot be * stored in the Bundle, as Locale's classloader will not recognize it). */ final Bundle resultBundle = PluginBundleManager.generateBundle(getApplicationContext(), message); resultIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE, resultBundle); /* * The blurb is concise status text to be displayed in the host's UI. */ final String blurb = generateBlurb(getApplicationContext(), message); resultIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_STRING_BLURB, blurb); setResult(RESULT_OK, resultIntent); } } super.finish(); } /** * @param context Application context. * @param message The toast message to be displayed by the plug-in. Cannot be null. * @return A blurb for the plug-in. */ /* package */ public static String generateBlurb(final Context context, final String message) { final int maxBlurbLength = context.getResources().getInteger(R.integer.twofortyfouram_locale_maximum_blurb_length); if (message.length() > maxBlurbLength) { return message.substring(0, maxBlurbLength); } return message; } }