Redirect
/*
* Copyright (C) 2007 The Android Open Source Project
*
* 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 app.test;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
* Entry into our redirection example, describing what will happen.
*/
public class Test extends Activity {
static final int INIT_TEXT_REQUEST = 0;
static final int NEW_TEXT_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Watch for button clicks.
Button clearButton = (Button) findViewById(R.id.clear);
clearButton.setOnClickListener(mClearListener);
Button newButton = (Button) findViewById(R.id.newView);
newButton.setOnClickListener(mNewListener);
// Retrieve the current text preference. If there is no text
// preference set, we need to get it from the user by invoking the
// activity that retrieves it. To do this cleanly, we will
// temporarily hide our own activity so it is not displayed until the
// result is returned.
if (!loadPrefs()) {
Intent intent = new Intent(this, RedirectGetter.class);
startActivityForResult(intent, INIT_TEXT_REQUEST);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == INIT_TEXT_REQUEST) {
// If the request was cancelled, then we are cancelled as well.
if (resultCode == RESULT_CANCELED) {
finish();
// Otherwise, there now should be text... reload the prefs,
// and show our UI. (Optionally we could verify that the text
// is now set and exit if it isn't.)
} else {
loadPrefs();
}
} else if (requestCode == NEW_TEXT_REQUEST) {
// In this case we are just changing the text, so if it was
// cancelled then we can leave things as-is.
if (resultCode != RESULT_CANCELED) {
loadPrefs();
}
}
}
private final boolean loadPrefs() {
// Retrieve the current redirect values.
// NOTE: because this preference is shared between multiple
// activities, you must be careful about when you read or write
// it in order to keep from stepping on yourself.
SharedPreferences preferences = getSharedPreferences("RedirectData", 0);
mTextPref = preferences.getString("text", null);
if (mTextPref != null) {
TextView text = (TextView) findViewById(R.id.text);
text.setText(mTextPref);
return true;
}
return false;
}
private OnClickListener mClearListener = new OnClickListener() {
public void onClick(View v) {
// Erase the preferences and exit!
SharedPreferences preferences = getSharedPreferences(
"RedirectData", 0);
preferences.edit().remove("text").commit();
finish();
}
};
private OnClickListener mNewListener = new OnClickListener() {
public void onClick(View v) {
// Retrieve new text preferences.
Intent intent = new Intent(Test.this, RedirectGetter.class);
startActivityForResult(intent, NEW_TEXT_REQUEST);
}
};
private String mTextPref;
}
/**
* Sub-activity that is executed by the redirection example when input is needed
* from the user.
*/
class RedirectGetter extends Activity {
private String mTextPref;
private TextView mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.row);
// Watch for button clicks.
Button applyButton = (Button) findViewById(R.id.apply);
applyButton.setOnClickListener(mApplyListener);
// The text being set.
mText = (TextView) findViewById(R.id.text);
// Display the stored values, or if not stored initialize with an empty
// String
loadPrefs();
}
private final void loadPrefs() {
// Retrieve the current redirect values.
// NOTE: because this preference is shared between multiple
// activities, you must be careful about when you read or write
// it in order to keep from stepping on yourself.
SharedPreferences preferences = getSharedPreferences("RedirectData", 0);
mTextPref = preferences.getString("text", null);
if (mTextPref != null) {
mText.setText(mTextPref);
} else {
mText.setText("");
}
}
private OnClickListener mApplyListener = new OnClickListener() {
public void onClick(View v) {
SharedPreferences preferences = getSharedPreferences(
"RedirectData", 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("text", mText.getText().toString());
if (editor.commit()) {
setResult(RESULT_OK);
}
finish();
}
};
}
//main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project
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.
-->
<!-- Demonstrates redirection between activities.
See corresponding Java code com.android.sdk.app.RedirectEnter.java. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip"
android:text="redirect_main"/>
<TextView android:id="@+id/text"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip" />
<Button android:id="@+id/clear"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="clear_text">
<requestFocus />
</Button>
<Button android:id="@+id/newView"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="new_text">
</Button>
</LinearLayout>
//row.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project
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.
-->
<!-- Demonstrates redirection between activities.
See corresponding Java code com.android.sdk.app.RedirectEnter.java. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip"
android:text="redirect_getter"/>
<EditText android:id="@+id/text"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip">
<requestFocus />
</EditText>
<Button android:id="@+id/apply"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="apply" />
</LinearLayout>
Related examples in the same category