diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-11 12:11:56 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-11 12:11:56 -0700 |
commit | c39a6e0c51e182338deb8b63d07933b585134929 (patch) | |
tree | e55fc5bd38b1eb8fb4851a0fe1cc264a7fe2f245 /tests/appwidgets/AppWidgetHostTest/src | |
parent | b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54 (diff) | |
download | frameworks_base-c39a6e0c51e182338deb8b63d07933b585134929.zip frameworks_base-c39a6e0c51e182338deb8b63d07933b585134929.tar.gz frameworks_base-c39a6e0c51e182338deb8b63d07933b585134929.tar.bz2 |
auto import from //branches/cupcake/...@137873
Diffstat (limited to 'tests/appwidgets/AppWidgetHostTest/src')
4 files changed, 356 insertions, 0 deletions
diff --git a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetContainerView.java b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetContainerView.java new file mode 100644 index 0000000..b08ba52 --- /dev/null +++ b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetContainerView.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2008 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 com.android.tests.appwidgethost; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +public class AppWidgetContainerView extends LinearLayout +{ + public AppWidgetContainerView(Context context) { + super(context); + } + + public AppWidgetContainerView(Context context, AttributeSet attrs) { + super(context, attrs); + } +} diff --git a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java new file mode 100644 index 0000000..2fb2d1d --- /dev/null +++ b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2008 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 com.android.tests.appwidgethost; + +import android.app.Activity; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.appwidget.AppWidgetHost; +import android.appwidget.AppWidgetHostView; +import android.appwidget.AppWidgetProviderInfo; +import android.appwidget.AppWidgetManager; +import android.os.Bundle; +import android.util.Log; +import android.view.ContextMenu; +import android.view.MenuItem; +import android.view.View; +import android.widget.LinearLayout; + +public class AppWidgetHostActivity extends Activity +{ + static final String TAG = "AppWidgetHostActivity"; + + static final int DISCOVER_APPWIDGET_REQUEST = 1; + static final int CONFIGURE_APPWIDGET_REQUEST = 2; + static final int HOST_ID = 1234; + + static final String PENDING_APPWIDGET_ID = "pending_appwidget"; + + AppWidgetManager mAppWidgetManager; + AppWidgetContainerView mAppWidgetContainer; + + public AppWidgetHostActivity() { + mAppWidgetManager = AppWidgetManager.getInstance(this); + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + setContentView(R.layout.appwidget_host); + + findViewById(R.id.add_appwidget).setOnClickListener(mOnClickListener); + mAppWidgetContainer = (AppWidgetContainerView)findViewById(R.id.appwidget_container); + + if (false) { + if (false) { + mHost.deleteHost(); + } else { + AppWidgetHost.deleteAllHosts(); + } + } + } + + View.OnClickListener mOnClickListener = new View.OnClickListener() { + public void onClick(View v) { + discoverAppWidget(DISCOVER_APPWIDGET_REQUEST); + } + }; + + void discoverAppWidget(int requestCode) { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mHost.allocateAppWidgetId()); + startActivityForResult(intent, requestCode); + } + + void configureAppWidget(int requestCode, int appWidgetId, ComponentName configure) { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE); + intent.setComponent(configure); + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); + SharedPreferences.Editor prefs = getPreferences(0).edit(); + prefs.putInt(PENDING_APPWIDGET_ID, appWidgetId); + prefs.commit(); + startActivityForResult(intent, requestCode); + } + + void handleAppWidgetPickResult(int resultCode, Intent intent) { + // BEGIN_INCLUDE(getExtra_EXTRA_APPWIDGET_ID) + Bundle extras = intent.getExtras(); + int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); + // END_INCLUDE(getExtra_EXTRA_APPWIDGET_ID) + if (resultCode == RESULT_OK) { + AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId); + + if (appWidget.configure != null) { + // configure the AppWidget if we should + configureAppWidget(CONFIGURE_APPWIDGET_REQUEST, appWidgetId, appWidget.configure); + } else { + // just add it as is + addAppWidgetView(appWidgetId, appWidget); + } + } else { + mHost.deleteAppWidgetId(appWidgetId); + } + } + + void handleAppWidgetConfigureResult(int resultCode, Intent data) { + int appWidgetId = getPreferences(0).getInt(PENDING_APPWIDGET_ID, -1); + Log.d(TAG, "resultCode=" + resultCode + " appWidgetId=" + appWidgetId); + if (appWidgetId < 0) { + Log.w(TAG, "was no preference for PENDING_APPWIDGET_ID"); + return; + } + if (resultCode == RESULT_OK) { + AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId); + addAppWidgetView(appWidgetId, appWidget); + } else { + mHost.deleteAppWidgetId(appWidgetId); + } + } + + void addAppWidgetView(int appWidgetId, AppWidgetProviderInfo appWidget) { + // Inflate the AppWidget's RemoteViews + AppWidgetHostView view = mHost.createView(this, appWidgetId, appWidget); + + // Add it to the list + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.FILL_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + mAppWidgetContainer.addView(view, layoutParams); + + registerForContextMenu(view); + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case DISCOVER_APPWIDGET_REQUEST: + handleAppWidgetPickResult(resultCode, data); + break; + case CONFIGURE_APPWIDGET_REQUEST: + handleAppWidgetConfigureResult(resultCode, data); + } + } + + protected void onStart() { + super.onStart(); + mHost.startListening(); + } + + protected void onStop() { + super.onStop(); + mHost.stopListening(); + } + + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenu.ContextMenuInfo menuInfo) { + menu.add(ContextMenu.NONE, R.string.delete_appwidget, ContextMenu.NONE, + R.string.delete_appwidget); + } + + public boolean onContextItemSelected(MenuItem item) { + MyAppWidgetView view = (MyAppWidgetView)item.getMenuInfo(); + switch (item.getItemId()) { + case R.string.delete_appwidget: + Log.d(TAG, "delete! " + view.appWidgetId); + mAppWidgetContainer.removeView(view); + mHost.deleteAppWidgetId(view.appWidgetId); + break; + } + + return true; + } + + class MyAppWidgetView extends AppWidgetHostView implements ContextMenu.ContextMenuInfo { + int appWidgetId; + + MyAppWidgetView(int appWidgetId) { + super(AppWidgetHostActivity.this); + this.appWidgetId = appWidgetId; + } + + public ContextMenu.ContextMenuInfo getContextMenuInfo() { + return this; + } + } + + AppWidgetHost mHost = new AppWidgetHost(this, HOST_ID) { + protected AppWidgetHostView onCreateView(Context context, int appWidgetId, AppWidgetProviderInfo appWidget) { + return new MyAppWidgetView(appWidgetId); + } + }; +} + + diff --git a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetConfigure.java b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetConfigure.java new file mode 100644 index 0000000..9a6099a --- /dev/null +++ b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetConfigure.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2008 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 com.android.tests.appwidgethost; + +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +public class TestAppWidgetConfigure extends Activity { + static final String TAG = "TestAppWidgetConfigure"; + + public TestAppWidgetConfigure() { + super(); + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + setContentView(R.layout.test_appwidget_configure); + + findViewById(R.id.save_button).setOnClickListener(mOnClickListener); + } + + View.OnClickListener mOnClickListener = new View.OnClickListener() { + public void onClick(View v) { + String text = ((EditText)findViewById(R.id.edit_text)).getText().toString(); + Log.d(TAG, "text is '" + text + '\''); + SharedPreferences.Editor prefs = getSharedPreferences(TestAppWidgetProvider.PREFS_NAME, 0) + .edit(); + prefs.putString(TestAppWidgetProvider.PREF_PREFIX_KEY, text); + prefs.commit(); + setResult(RESULT_OK); + finish(); + } + }; + +} + + diff --git a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetProvider.java b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetProvider.java new file mode 100644 index 0000000..b5d91d4 --- /dev/null +++ b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetProvider.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2008 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 com.android.tests.appwidgethost; + +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.appwidget.AppWidgetManager; +import android.os.Bundle; +import android.os.SystemClock; +import android.util.Log; +import android.widget.RemoteViews; + +public class TestAppWidgetProvider extends BroadcastReceiver { + static final String TAG = "TestAppWidgetProvider"; + + static final String PREFS_NAME = "com.android.tests.appwidgethost.TestAppWidgetProvider"; + static final String PREF_PREFIX_KEY = "prefix"; + + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + Log.d(TAG, "intent=" + intent); + + if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { + Log.d(TAG, "ENABLED"); + } + else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) { + Log.d(TAG, "DISABLED"); + } + else if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { + Log.d(TAG, "UPDATE"); + // BEGIN_INCLUDE(getExtra_EXTRA_APPWIDGET_IDS) + Bundle extras = intent.getExtras(); + int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); + // END_INCLUDE(getExtra_EXTRA_APPWIDGET_IDS) + + SharedPreferences prefs = context.getSharedPreferences( + TestAppWidgetProvider.PREFS_NAME, 0); + String prefix = prefs.getString(PREF_PREFIX_KEY, "hai"); + + AppWidgetManager gm = AppWidgetManager.getInstance(context); + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.test_appwidget); + views.setTextViewText(R.id.oh_hai_text, prefix + ": " + SystemClock.elapsedRealtime()); + if (false) { + gm.updateAppWidget(appWidgetIds, views); + } else { + gm.updateAppWidget(new ComponentName("com.android.tests.appwidgethost", + "com.android.tests.appwidgethost.TestAppWidgetProvider"), views); + } + } + } +} + |